C语言队列入门程序举例
来源:互联网 发布:铁岭网络招聘 编辑:程序博客网 时间:2024/06/07 09:22
**
C语言队列入门程序举例
**
程序功能
创建一个7个数据的循环队列,创建完成后立即返回排头和队尾元素指针,并返回队中元素,然后将倒数三个元素退队,退队后返回退队元素是什么,然后再返回队中元素和现在的排头和队尾指针。
源代码
main.h
#include <stdio.h>#include <math.h>#include "Queue.h"//函数声明void InitQueue(Queue *Q);void EnQueue(Queue *Q, int key);int DeQueue(Queue *Q);int IsQueueEmpty(Queue *Q);int IsQueueFull(Queue *Q);
Queue.h
#include <stdio.h>#include <stdlib.h>typedef struct queue{ int queuesize; //数组的大小 int head, tail; //队列的头和尾下标 int *q; //数组头指针}Queue;
main.c
#include "main.h"void main(){ Queue example1,example2,*Q,*X; int i,key,size,*h,*t; Q=&example1; X=&example2; InitQueue(Q); InitQueue(X); printf("请输入七个整数\n"); for(i=0;i<7;i++) { scanf("%d",&key); EnQueue(Q,key); } //遍历队列 h=&Q->q[Q->head]; t=&Q->q[Q->tail-1]; size=(int)(fabs((double)((Q->tail)-(Q->head)))); //队列中现有的元素个数 printf("输入完成\n您创建的队列的排头指针为\n%d\n队尾指针为\n%d\n队中各元素分别为\n",h,t); if(size==0) printf("队列为空\n"); else for(i=0;i<size;i++) printf("%d\t",Q->q[(Q->head+i)%(Q->queuesize)]); //寄存其余元素 InitQueue(X); for(i=0;i<size-3;i++) EnQueue(X,DeQueue(Q)); for(i=3;i>0;i--) printf("\n退队的倒数第%d个元素为\n%d\n",i,DeQueue(Q)); //恢复原队列剩余元素 for(i=0;i<size-3;i++) EnQueue(Q,DeQueue(X)); //遍历剩余元素并输出头尾指针 h=&Q->q[Q->head]; t=&Q->q[Q->tail-1]; size=(int)(fabs((double)((Q->tail)-(Q->head)))); //队列中现有的元素个数 printf("此时队列的排头指针为\n%d\n队尾指针为\n%d\n队中剩余各元素分别为\n",h,t); if(size==0) printf("队列为空\n"); else for(i=0;i<size;i++) printf("%d\t",Q->q[(Q->head+i)%(Q->queuesize)]);}
Queue.c
void InitQueue(Queue *Q)//初始化队列{ Q->queuesize = 8; Q->q = (int *)malloc(sizeof(int) * Q->queuesize); //分配内存 Q->tail = 0; Q->head = 0;}void EnQueue(Queue *Q, int key)//入队{ int tail = (Q->tail+1) % Q->queuesize; //取余保证,当quil=queuesize-1时,再转回0 if (tail == Q->head) //此时队列没有空间 { printf("队列已满\n"); } else { Q->q[Q->tail] = key; Q->tail = tail; }}int DeQueue(Queue *Q)//退队{ int tmp; if(Q->tail == Q->head) //判断队列不为空 { tmp=0; printf("队列为空\n"); } else { tmp = Q->q[Q->head]; Q->head = (Q->head+1) % Q->queuesize; } return tmp;}int IsQueueEmpty(Queue *Q)//判断队列是否为空{ if(Q->head == Q->tail) { printf("队列为空\n"); return 0; } else { printf("队列不为空\n"); return 0; }}int IsQueueFull(Queue *Q)//判断队列是否为满{ if((Q->tail+1)% Q->queuesize == Q->head) { printf("队列已满\n"); return 0; } else { printf("队列未满\n"); return 0; }}
阅读全文
0 0
- C语言队列入门程序举例
- C语言程序举例
- C语言程序优化原则举例
- C语言 入门程序
- C语言指针总结之程序举例分析
- C语言入门三个程序
- C语言 #define 举例
- 程序猿之---C语言细节26(C语言中布尔类型、continue细节、sizeof举例、strlen举例)
- C语言中哈希表简单举例
- C语言枚举类型举例
- C语言枚举类型举例
- C语言中哈希表简单举例
- C语言数组应用举例
- C语言数组应用举例
- c语言:算数转换举例
- C语言sscanf() 用法举例
- C语言编写Socket程序---入门篇
- 计算机系统原理(数据的表示和存储)(C语言程序中整数举例)
- 实现4G模块sim7100在Linux系统上的拨号上网
- OBS 推流失败后录制功能不可使用的问题
- 作业
- Cadence学习直接百度可以找到
- 走马灯的控件 MarqueeView(继承ViewFlipper),解锁后,走马灯失效的解决方法
- C语言队列入门程序举例
- B.FRIENDit壁虎忍者悬浮式黑轴机械键盘 台式电脑笔记本外接有线游戏键盘IGK2-ST白色套装
- 主席树讲解
- rails脚手架学习入门(一)
- android 8.0新特性
- 嵌入式Linux完全开发手册-------------U-boot(与之前网峰那篇结合起来更有感觉)
- suse无法启动ssh服务,netstat无22端口,xshell无法连接suse
- Redis vs Memcached
- Android自动化打包