一、鏈隊列
隊列的鏈式存儲結構稱為鏈隊列,鏈隊列的結構和各種基本操作均類似線性鏈表,只不過它的刪除和插入操作受限,只允許
在隊尾插入、隊頭刪除。為了操作方便,可以將隊頭指針指向隊列的頭結點,隊尾指針指向終端結點。
二、鏈隊列的基本操作
(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)