1 循环队列原理图

2 结构体设计

3 运行结果图

4 完整源代码

#include<stdio.h>
#include<malloc.h>
/*这是一个c语言用数组方式实现循环队列程序time : 2015-08-23by 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->pHead2.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");
}

c语言数组方式实现静态循环队列相关推荐

  1. 用数组来实现一个循环队列

    1. 初始化 数组 头尾节点 2. 插入 3. 判满 需要预留一个位置,用于判断队列是否满了 如上图发现(rear+1)%maxSize == front;不再插入 4. 删除 如上直接移动front ...

  2. C语言数组越界导致无限循环

    大奖也是你们的,感谢支持,不喜欢的请轻拍.过年抽奖我还是很期待的,每年公司的年会抽奖的时候,我总是能小中一把,有一年我还中了个一等奖,不知道大家对一等奖什么概念,中一等奖的概率非常低,集人品运气于一身 ...

  3. 循环队列及C语言实现一

    循环队列是为了充分利用内存,进行数据操作的一种基本算法.具体实现方式可划分为:链式队列和静态队列,这里所谓的静态是指在一片连续的内存区域进行数据操作.本文只讲述静态队列,也是最简单的实现方式,链式队列 ...

  4. 循环队列–C语言实现–数据结构

    循环队列–C语言实现–数据结构 目录 循环队列C语言实现数据结构 目录 一 要求 二 循环队列 三 循环队列的算法设计 1 建立循环队列 2 置空队列 3 入队 4 出队 5 打印队 四 程序 1 程 ...

  5. 【数据结构】顺序循环队列及其实现(C语言)

    给定一个大小为MAXSIZE的数组储存一个队列,经过若干次的插入和删除以后,当队尾指针 rear = MAXSIZE 时,呈现队列满的状态,而事实上数组的前部可能还有空闲的位置.为了有效地利用空间,引 ...

  6. Java数组实现循环队列

    Java数组实现循环队列 上一节(Java实现队列--顺序队列.链式队列)我们使用数组实现了顺序队列,但是在tail == n时会有数据搬移操作,这样入队操作性能就会受到影响.这里我们使用循环队列的解 ...

  7. 第六章 C语言数组_C语言数组是静态的,不能插入或删除元素

    在C语言中,数组一旦被定义后,占用的内存空间就是固定的,容量就是不可改变的,既不能在任何位置插入元素,也不能在任何位置删除元素,只能读取和修改元素,我们将这样的数组称为静态数组. 反过来说,如果数组在 ...

  8. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

    目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

  9. 顺序循环队列的基本操作

    [问题描述] 实现循环队列的基本操作.(循环队列最大长度不超过20) [输入形式] 输入若干个整数(以空格分隔,非整数结束输入),其中0表示做出队操作,不为0的整数为入队元素. [输出形式] 若出队错 ...

最新文章

  1. leetcode409.Longest Palindrome
  2. Ubuntu Linux中配置Mplayer万能播放器
  3. 程序员谈敏捷开发团队里成员间的相互信任
  4. 产品认知:产品经理需要具备哪些核心竞争力?
  5. linux强制使用windows命名,如何强制Windows重命名带有特殊字符的文件?
  6. 即时通讯软件在企业里的应用及发展
  7. Android轩辕剑之ActionBar之四
  8. PASCAL-VOC2012 数据集介绍 及 制作同格式数据
  9. 集合类ArrayList、HashMap、HashSet线程不安全
  10. 读完云原生数仓领导者Snowflake的论文,想要和你们分享这些……
  11. [WPF] 嵌入资源到DLL,并解决PNG图片问题
  12. c语言程序 题库管理,C语言程序设计题库管理系统-20210412073918.docx-原创力文档
  13. javweb音乐网站_基于jsp的音乐网站-JavaEE实现音乐网站 - java项目源码
  14. 关于HD-SDI原理设计、PCB设计汇总
  15. Github创建的个人简历
  16. Ubuntu16.04(64bit)兼容32bit程序
  17. 使用蒙特卡罗法解决道填图题目
  18. 虚机打不开报failed to lock the file错误原因及解决方案
  19. 『The Book of Why』导言:思维胜于数据
  20. 电视如何启动微型计算机,装了机顶盒之后,电视一开机如何直接默认进入数字电视方式...

热门文章

  1. vb 绘制图形/蝴蝶动画
  2. 汇编语言 明明定义了栈仍然no stack segment 以及栈空间数据被篡改问题
  3. URL URI傻傻分不清楚,dart告诉你该怎么用
  4. MySQL局域网内访问慢的原因及解决方法
  5. 数据结构——线性表的链式表示
  6. 【解析】spring-boot整合通用mapper
  7. 1021 个位数统计 (15分)——10行代码AC(解题报告)
  8. linux启动后分区数据变化,求助!我删除了Linux启动分区
  9. php识别名片,用户信息名片怎么利用PHP实现自动生成
  10. nginx php fpm 连接数,哪个php5-fpm设置为高并发连接数nginx