首页 / C语言 / C语言实现循环队列(基本操作及图示)
C语言实现循环队列(基本操作及图示)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言实现循环队列(基本操作及图示),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2307字,纯文字阅读大概需要4分钟。
内容图文
![C语言实现循环队列(基本操作及图示)](/upload/InfoBanner/zyjiaocheng/1324/ad5dad88ca3e4ace91cedff35fa71a3a.jpg)
————————————————————————————————————————————
如果使用顺序表作为队列的话,当处于右图状态则不能继续插入新的队尾元素,否则会因为数组越界而导致程序代码被破坏。
由此产生了由链表实现的循环队列,只有队列未满时才可以插入新的队尾元素。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
基本操作:
/* 定义链表队列 */
定义结构体中front指示队头位置,rear指示队尾位置,base指针用于申请空间并存放数据。
/* 初始化队列 */
使用指针*base申请100个内存空间,front和rear分别为0,此时队列为空
/* 判断空或满 */
-
初始化时, front = rear = 0 时为空, Q->rear = ( 0+1 ) %100 = 1 ,队列未满可以插入队列
-
入队 3 个元素时, rear = 3 , Q->rear = ( 3+1 ) %100 = 4 ,队列未满
-
入队 99 个元素时, rear = 99 , Q->rear = ( 99+1 ) %100 = 0 ,队列满,不可入队
-
出队 2 个元素时, front = 2
出队后,执行两次 Q->front = (Q->front + 1) % MAXQSIZE ,得到 Q->front = 2
-
再次入队 1 个元素时, rear = 0 , Q->rear = ( 99+1 ) %100=0 ,队列未满,可以入队
实现代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3#define OK 1 4#define ERROR 0 5#define OVERFLOW -2 6#define MAXQSIZE 100 7 typedef int Status; 8 typedef int QElemType; 9 typedef struct Node 10{ 11 QElemType *base; //初始化动态分配存储空间12int front; 13int rear; 14} SqQueue; 15 Status InitQueue(SqQueue *Q) 16{ 17 Q->base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType)); 18if (!Q->base) 19 exit(OVERFLOW); 20 Q->front = Q->rear = 0; 21return OK; 22} 23 Status EnQueue(SqQueue *Q, QElemType elem) 24{ 25//队列为空时 1%100==1,队列满时(99+1)%100==0,最多容纳99个元素26if ((Q->rear + 1) % MAXQSIZE == (Q->front)) 27return ERROR; 28 Q->base[Q->rear] = elem; 29 Q->rear = (Q->rear + 1) % MAXQSIZE; //rear始终在0-100中循环30return OK; 31} 32 Status OutQueue(SqQueue *Q, QElemType *e) 33{ 34if (Q->front == Q->rear) 35return ERROR; 36 *e = Q->base[Q->front]; 37 Q->front = (Q->front + 1) % MAXQSIZE; 38return OK; 39} 40Status PrintQueue(SqQueue Q) 41{ 42 printf("the queue is:"); 43for (int i = Q.front; i < Q.rear; ++i) 44 printf("%d ", Q.base[i]); 45return OK; 46} 47int main() 48{ 49 SqQueue queue; 50 QElemType elem; 51int i; 52 InitQueue(&queue); 53 printf("input:"); 54while(scanf("%d", &elem) != EOF) 55 EnQueue(&queue, elem); 56 PrintQueue(queue); 57/* 输入要出队列的个数 */58 printf("\noutput:"); 59 scanf("%d", &i); 60while(i != 0) 61 { 62 OutQueue(&queue, &elem); 63 i--; 64 } 65 PrintQueue(queue); 66return OK; 67 }
原文:http://www.cnblogs.com/hughdong/p/6841970.html
内容总结
以上是互联网集市为您收集整理的C语言实现循环队列(基本操作及图示)全部内容,希望文章能够帮你解决C语言实现循环队列(基本操作及图示)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。