c语言数组方式实现静态循环队列
来源:互联网 发布:java中图片上传和回显 编辑:程序博客网 时间:2024/04/30 07:48
1 循环队列原理图
2 结构体设计
3 运行结果图
4 完整源代码
#include<stdio.h>#include<malloc.h>/* 这是一个c语言用数组方式实现循环队列程序 time : 2015-08-23 by paul*/typedef struct Queue{ int length; //数组长度 int *pbase; //数组 int head;//int类型'头指针' int tail; //int类型'尾指针'}Queue,*PQueue;PQueue initQueue();void enQueue(PQueue pQueue,int val);int isFull(PQueue pQueue);int isEmpty(PQueue pQueue);void traverseQueue(PQueue pQueue);void outQueue(PQueue pQueue);void destroyQueue(PQueue pQueue);int main(void){ //初始化队列 PQueue PQueue = initQueue(); traverseQueue(PQueue); //入队 int i = 0 ; for(; i < 20 ; i++){ enQueue(PQueue,i); } //入队后第一次遍历 traverseQueue(PQueue); //第一次出队 int j = 0; for(;j<3;j++){ outQueue(PQueue); } //第一次出队遍历 traverseQueue(PQueue); //第二次出队 for(;j<5;j++){ outQueue(PQueue); } //第二次出队遍历traverseQueue(PQueue);//第三次出队 for(;j<10;j++){ outQueue(PQueue); } //第三次出队遍历traverseQueue(PQueue);//销毁队列destroyQueue(PQueue); return 1;};//出队void outQueue(PQueue pQueue){ if(isEmpty(pQueue)){ printf("出队失败,队列为空\n"); }else{ printf("%d 出队成功\n",*(pQueue->pbase + pQueue->head)); pQueue->head = (pQueue->head + 1)% pQueue->length; }}//初始化循环队列PQueue initQueue(){ int lengh = 8;//队列长度为8 //初始化队列 PQueue pQueue = (Queue *)malloc(sizeof(Queue)); if(pQueue == NULL){ printf("初始化队列失败,内存不够了\n"); } pQueue->length = lengh; pQueue->pbase = (int *)malloc(sizeof(int)* pQueue->length); if(pQueue->pbase == NULL){ printf("初始化数组失败,内存不够了\n"); } pQueue->head = 0; pQueue->tail = 0; printf("初始化队列长度为%d\n",pQueue->length); return pQueue;};//队列是否为空int isEmpty(PQueue pQueue){ if(pQueue->head == pQueue->tail){ return 1; }else{ return 0; }};int isFull(PQueue pQueue){ /* 得到队列实际的元素个数 这里采用的逻辑为: 1 队列实际长度 + 1 = 队列初始化长度 2 好处: 可以区分队满和队空的情况 2.1 初始化队列为空时 pQueue->pHead 2.2 假设一直有数据在入队,那么当pTail达到了数组最大长度后, 又从头开始,会存在 pQueue->pHead = pQueue->pTail情况. 2.1和2.2队满和队空的情况就可以区别开来 */ if((pQueue->tail + 1)% pQueue->length == pQueue-> head){ return 1; }else{ return 0; }};//遍历队列void traverseQueue(PQueue pQueue){ printf("循环队列的元素为: \n"); if(isEmpty(pQueue)){ printf("队列为空\n"); }else{ int head = pQueue->head ; while((head!= pQueue->tail)){ printf("%d ",*(pQueue->pbase+head)); head = (head + 1)%pQueue->length; } } printf("\n");}//入队void enQueue(PQueue pQueue,int val){ //队列是否否已满 if(isFull(pQueue)){ printf("队列已满, %d 不能入队\n",val); }else{ *(pQueue->pbase + pQueue->tail) = val; pQueue->tail = pQueue->tail + 1; printf("%d 成功入队\n",val); }};//销毁队列void destroyQueue(PQueue pQueue){ if(!isEmpty(pQueue)){ while( pQueue->head != pQueue->tail ){ int head = pQueue->head; pQueue->head = (pQueue->head + 1)%pQueue->length; free(pQueue->pbase+head); } } free(pQueue); printf("销毁队列成功\n");}
0 0
- c语言数组方式实现静态循环队列
- 静态数组实现循环队列 c语言
- C语言实现使用静态数组实现循环队列
- C语言数组实现循环队列
- 静态数组实现队列(C语言)
- 静态数组实现循环队列
- 静态数组实现循环队列
- 数据结构基础(5)--C语言实现循环队列--静态
- C语言实现使用动态数组实现循环队列
- c语言用简单数组实现循环队列
- 数据结构C语言实现之循环队列----数组形式---简单化
- 队列的C语言实现(循环数组结构)
- C 数组实现 循环队列
- 循环队列C语言实现
- c语言实现循环队列
- C语言实现循环队列
- C语言实现循环队列
- C语言实现循环队列
- 列表数据类型-列表常用操作
- MVC+EasyUI实现查询显示到相应表格
- poj 1852 Ants <规律题>
- PowerDesigner的使用(一)
- Android数据库ORMlite框架翻译系列(第二章:part 1)
- c语言数组方式实现静态循环队列
- POJ 1995 Raising Modulo Numbers(快速幂取余)
- mysql 字符串转日期
- SQL操作全集
- Linux多线程如何避免死锁
- leveldb学习:skiplist
- Java(十二)--List的添加,修改,删除
- 设计模式(一)之理解篇
- Activity