博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言编程之循环队列
阅读量:6540 次
发布时间:2019-06-24

本文共 3352 字,大约阅读时间需要 11 分钟。

        利用链表实现的循环队列,完成了队列的入队和出队,对于队空和队满用了一个flag进行标记。入队flag++,出队flag--

1 #include"stdio.h"  2   3 typedef int element;  4   5 typedef struct Node{  6         struct Node *next;  7         element data;  8 }*pNode;  9  10 typedef struct QNode{ 11         pNode front,rear; 12         element flag; 13 }*Linknode; 14  15 //init a empty queue 16 element Init_queue(Linknode *pLinknode) 17         { 18            Linknode P; 19            P=*pLinknode; 20            P->front=P->rear=(pNode)malloc(sizeof(struct Node)); 21            P->front->next=NULL; 22            P->rear->next=P->front;     // make loop queue font linked rear,in usuall queue this is P->rear->next=NULL;make a change become //Loop queue; 23            P->flag=0; 24         } 25  26 //add a data to queue rear 27 element Add_queue(Linknode *pLinknode,int num) 28         { 29           Linknode P; 30           P=*pLinknode; 31           pNode s=(pNode)malloc(sizeof(struct Node)); 32           s->data=num; 33           s->next=P->front;   //in this position we can see the new add memory s is point to front,in usuall queue we can see s->next=NULL;
34           P->rear->next=s; 35           P->rear=s;                    36           ++P->flag; 37           printf("add data:%d add flag:%d\n",P->rear->data,P->flag); 38         } 42         { 43           if((*pLinknode)->flag==0) 44                 { 45                   printf("queue is empty\n"); 46                   return 0; 47                 } 48           //if(((*pLinknode)->front)==((*pLinknode)->rear)) 49           //    {
50 // printf("queue is empty!!"); 51 // return 0; 52 // } 53 Linknode P; 54 pNode k; 55 P=*pLinknode; 56 k=P->front->next; 57 P->front->next=k->next; 58 printf("delet data:%d\n",k->data); 59 //--P->flag; 60 free(k); 61 printf("delete flag:%d\n",P->flag); 62 --P->flag; 63 return 0; 64 } 65 66 element Print_queue(Linknode pLinknode) 67 { 68 pNode p; 69 p=pLinknode->front; 71 while(p!=pLinknode->rear&&pLinknode->flag) //it is importand,because in loop queue fornt==rear can means empty or full,it is a //loop,we can't determin this loop queue is empty by using front==rear,must add num as flag;
72                 { 73                   p=p->next; 74                   printf("data:%d\n",p->data); 75                 } 76           return 0; 77         } 78 element main() 79         { 80           Linknode pQnode; 81           pQnode=(Linknode)malloc(sizeof(struct QNode)); 82           Init_queue(&pQnode); 83           Add_queue(&pQnode,99); 84           Add_queue(&pQnode,11); 85           Add_queue(&pQnode,22); 86           Add_queue(&pQnode,33); 87           Add_queue(&pQnode,44); 88           Add_queue(&pQnode,55); 89           Print_queue(pQnode); 90           Delet_queue(&pQnode); 91           Delet_queue(&pQnode); 92           Delet_queue(&pQnode); 93           Delet_queue(&pQnode); 94           Delet_queue(&pQnode); 95           Delet_queue(&pQnode); 96           Delet_queue(&pQnode); 97           Print_queue(pQnode); 98           return 0; 99         }100

 

转载于:https://www.cnblogs.com/qiuheng/p/5783996.html

你可能感兴趣的文章
一种机制,与js类似
查看>>
arping命令用法
查看>>
WPF之动态换肤
查看>>
封装一个进度条
查看>>
git clone --early EOF
查看>>
51nod 1135 原根 就是原根...
查看>>
expect用法举例
查看>>
PAT_A1127#ZigZagging on a Tree
查看>>
二叉树的建立和遍历
查看>>
ubuntu Server 安装 php5
查看>>
简单的ajax的结构
查看>>
JavaScript
查看>>
Truncate a string
查看>>
HDOJ1051(贪心)
查看>>
异常处理
查看>>
solr第一天 基础增删改查操作
查看>>
day30 item系列
查看>>
day11 reduce函数
查看>>
android 获取屏幕大小
查看>>
Linq之Linq to Sql
查看>>