C語言 鏈隊列的基本操作


一、鏈隊列

隊列的鏈式存儲結構稱為鏈隊列,鏈隊列的結構和各種基本操作均類似線性鏈表,只不過它的刪除和插入操作受限,只允許

在隊尾插入、隊頭刪除。為了操作方便,可以將隊頭指針指向隊列的頭結點,隊尾指針指向終端結點。  

二、鏈隊列的基本操作

(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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM