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