链式队列是数据结构中常用的一种数据存储方式,使用链表模拟队列的效果,简单的实现如下:
#include<stdlib.h>
#include<stdio.h>
//链式存储结构的队列
//定义节点
typedef struct QNode{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front = NULL;//队首指针
QueuePtr rear = NULL;//队尾指针
}LQueue;
//初始化队列
int Init(LQueue &queue){
queue.front = (QueuePtr)malloc(sizeof(QNode));
if(!queue.front){
printf("初始化失败\n");
return -1;
}
queue.rear = queue.front;
queue.rear->next=NULL;
printf("初始化成功\n");
return 0;
}
//销毁队列
int Destroy(LQueue &queue){
QueuePtr a;
while(queue.front!=queue.rear){
a=queue.front;
queue.front = queue.front->next;
free(a);
}
free(queue.front);
return 0;
}
//数据入队
int Enque(LQueue &queue,int a){
printf("入队数据为:%d\n",a);
QueuePtr newNode = (QueuePtr)malloc(sizeof(QNode));
newNode->data = a;
newNode->next = NULL;
queue.rear->next = newNode;
queue.rear = queue.rear->next;
return 0;
}
//数据出队
int Dequeue(LQueue &queue){
if(queue.front==queue.rear){
printf("队列为空\n");
return -1;
}
QueuePtr get = queue.front->next;
queue.front->next = get->next;
int data = get->data;
if(queue.rear==get)queue.rear=queue.front;
free(get);
return data;
}
int main(){
LQueue queue;
Init(queue);
int data[] = {2,34,55,66,74,3,23,4};
printf("数据依次入队\n");
for(int i=0;i<8;i++){
Enque(queue,data[i]);
}
printf("数据依次出队为:");
int d = Dequeue(queue);
while(d!=-1){
printf("%d ",d);
d = Dequeue(queue);
}
Destroy(queue);
return 0;
}