链式队列

Posted yolo-in-the-sun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链式队列相关的知识,希望对你有一定的参考价值。

队列结构


 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #define OK 1;
 5 #define False -1;
 6 //结点结构
 7 typedef struct QNode
 8 {
 9     char date;
10     struct QNode *next;
11 }QNode;
12 //链式队列结构
13 typedef struct Flag
14 {
15      QNode *front;
16     QNode *rear;
17 }Flag;

队列初始化

 

 1 //初始化
 2 int InitQueue (Flag *q)
 3 {
 4     q->front=q->rear=(QNode *)malloc(1*sizeof(QNode));
 5     if(!q->front)
 6     {
 7         exit(0);
 8     }
 9     q->front->next=NULL;
10     return OK;
11 }

 

入队

 1 //入队
 2 int CreateQueue(Flag *q,char e)
 3 {
 4      QNode *p;
 5      p=(QNode *)malloc(1*sizeof(QNode));
 6      if(!p)
 7      {
 8          exit(0);
 9      }
10      p->date=e;
11      p->next=NULL;
12      
13      q->rear->next=p;//尾插法,第一个元素位于首元节点位置,front相当于头节点,不存数
14      q->rear=p;//队尾变更
15      return OK;
16 }

打印

 

 1 //打印
 2 int PrintQueue(Flag *q)
 3 {
 4     QNode *pMove;
 5     pMove=q->front->next;//易错,注意刚开始遍历的地方类似于链表中的首元结点,此处的定位有一层嵌套
 6     while(pMove!=NULL)
 7     {
 8         printf("%c",pMove->date);
 9         pMove=pMove->next;
10     }
11     return OK;
12 }

 

判空

 

1 //判空
2 int Empty(Flag *q)
3 {
4     if(q->front==q->rear)
5         return OK;
6}

 

出栈并销毁

 

 1 //出栈+销毁
 2 int DeleteQueue(Flag *q,int a)//出栈
 3 {
 4     
 5     QNode *w;
 6     w=q->front->next;//相当于将首元的地址和数值(间接)一起传给w
 7     
 8     q->front->next=w->next;
 9     if(a==1)
10     printf("
出队一个元素:%c",w->date);
11     if( q->rear == w)//当只剩一个元素的处理
12         q->rear = q->front;
13     free(w);
14     return OK;
15 }

 

主函数测试

 1 //出栈+销毁
 2 int DeleteQueue(Flag *q,int a)//出栈
 3 {
 4     
 5     QNode *w;
 6     w=q->front->next;//相当于将首元的地址和数值(间接)一起传给w
 7     
 8     q->front->next=w->next;
 9     if(a==1)
10     printf("
出队一个元素:%c",w->date);
11     if( q->rear == w)
12         q->rear = q->front;
13     free(w);
14     return OK;
15 }

技术图片

 

以上是关于链式队列的主要内容,如果未能解决你的问题,请参考以下文章

链式队列的实现

链式队列总结

队列的定义循环队列的顺序存储结构及链式存储结构

Python数据结构系列☀️《队列(顺序队列链式队列双端队列)》——知识点讲解+代码实现☀️

队列的链式存储结构

C/C++数据结构-完整代码队列Queue(顺序存储,链式存储)增删改查