一、链队列
队列的链式存储结构称为链队列,链队列的结构和各种基本操作均类似线性链表,只不过它的删除和插入操作受限,只允许
在队尾插入、队头删除。为了操作方便,可以将队头指针指向队列的头结点,队尾指针指向终端结点。
二、链队列的基本操作
(1)链队列的结构定义
1 typedef struct node{ 2 int data; 3 struct node *next; 4 }lnode; 5 typedef struct{ 6 lnode *front,*rear; 7 }sQueue;
(2)链队列的初始
1 //链队列的初始 2 void InitQueue(sQueue *q){ 3 q->front=(lnode *)malloc(sizeof(lnode)); 4 q->rear=q->front; 5 }
(3)链队列的入队
1 //链队列的入队 2 void QueueInsert(sQueue *q,int num){ 3 lnode *p; 4 p=(lnode *)malloc(sizeof(lnode)); 5 p->data=num; 6 p->next=null; 7 q->rear->next=p; 8 q->rear=p; 9 }
(4)链队列的出队
1 //链队列的出队 2 void QueueDelete(sQueue *q,int *num){ 3 lnode *p; 4 if(q->front==q->rear){ 5 printf("队空,出队失败!\n"); 6 return; 7 } 8 p=q->front->next; 9 *num=p->data; 10 q->front->next=p->next; 11 if(q->rear==p)q->rear=q->front; 12 free(p); 13 }
(5)链队列的遍历
1 //链队列的遍历 2 void DispQueue(sQueue *q){ 3 lnode *p; 4 p=q->front->next; 5 while(p){ 6 printf("%d ",p->data); 7 p=p->next; 8 } 9 printf("\n"); 10 }
整体代码:

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdbool.h> 4 #define null 0 5 typedef struct node{ 6 int data; 7 struct node *next; 8 }lnode; 9 typedef struct{ 10 lnode *front,*rear; 11 }sQueue; 12 //链队列的初始 13 void InitQueue(sQueue *q){ 14 q->front=(lnode *)malloc(sizeof(lnode)); 15 q->rear=q->front; 16 } 17 18 //链队列的入队 19 void QueueInsert(sQueue *q,int num){ 20 lnode *p; 21 p=(lnode *)malloc(sizeof(lnode)); 22 p->data=num; 23 p->next=null; 24 q->rear->next=p; 25 q->rear=p; 26 } 27 //链队列的出队 28 void QueueDelete(sQueue *q,int *num){ 29 lnode *p; 30 if(q->front==q->rear){ 31 printf("队空,出队失败!\n"); 32 return; 33 } 34 p=q->front->next; 35 *num=p->data; 36 q->front->next=p->next; 37 if(q->rear==p)q->rear=q->front; 38 free(p); 39 } 40 //链队列的遍历 41 void DispQueue(sQueue *q){ 42 lnode *p; 43 p=q->front->next; 44 while(p){ 45 printf("%d ",p->data); 46 p=p->next; 47 } 48 printf("\n"); 49 } 50 int main(){ 51 sQueue *q; 52 int num; 53 q=(sQueue *)malloc(sizeof(sQueue)); 54 InitQueue(q); 55 printf("链队列的基本操作:\n"); 56 printf("(1)创建链队列\n"); 57 QueueInsert(q,1); 58 QueueInsert(q,2); 59 QueueInsert(q,3); 60 QueueInsert(q,4); 61 QueueInsert(q,5); 62 printf("(2)输出链队列:"); 63 DispQueue(q); 64 printf("(3)链队列出队:"); 65 QueueDelete(q,&num); 66 printf("出队%d ",num); 67 QueueDelete(q,&num); 68 printf("出队%d \n",num); 69 printf("(5)输出链队列:"); 70 DispQueue(q); 71 printf("(6)链队列出队:"); 72 QueueDelete(q,&num);printf("出队%d ",num); 73 QueueDelete(q,&num);printf("出队%d ",num); 74 QueueDelete(q,&num);printf("出队%d ",num); 75 QueueDelete(q,&num); 76 }
运行结果:
♂最近在学数据结构,文章错误以及相关问题欢迎指正交流♂~(QQ:2991337561)