/*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/

#include

#include

#define Queue_Size 50 //队列的最大长度

#define OK 1

#define ERROR 0

typedef struct

{

int elem[Queue_Size]; //队列的元素空间

int front; //头指针指示器

int rear; //尾指针指示器

int flag; //flag,判断队列是否为空的标志

}SeqQueue;

/**********************各个子函数的定义*********************/

void initQueue(SeqQueue *Q); //循环队列初始化

int enterQueue(SeqQueue *Q,int n); //循环队列入队操作

void deleteQueue(SeqQueue *Q); //循环队列出队操作

int isEmpty(SeqQueue *Q); //判断队列是否为空

int getHead(SeqQueue *Q,int *x); //读取队列的队头元素 ,指针x指向队头元素

int main(){

SeqQueue Q;

int choice;

while(true) //循环队列操作选择菜单

{

printf("*****************Please enter your choice*****************\n\n");

printf(" choice 1:Queue initialization\n");

printf(" choice 2:Into the queue\n");

printf(" choice 3:Out of the queue\n");

printf(" choice 4:Determine whether the queue is empty\n");

printf(" choice 5:Get queue head\n");

printf(" choice 0:exit\n\n");

scanf("%d",&choice);

switch(choice)

{

case 1:

initQueue(&Q);

break;

case 2:

int n;

printf("Please enter the number into the queue elements:");

scanf("%d",&n); //读入存入的队列元素个数

//三目运算符根据返回值判断元素是否进队成功

(enterQueue(&Q,n)==1)?printf("%d个元素依次进队成功\n",n):printf("%d个元素依次进队失败\n",n);

break;

case 3:

deleteQueue(&Q);

break;

case 4: //三目运算符根据返回值判断队列是否为空

(isEmpty(&Q)==1)?printf("An empty Queue\n"):printf("Not an empty Queue\n");

break;

case 5: //三目运算符根据返回值判断队头元素是否读取成功

int x;

(getHead(&Q,&x)==0)?printf("An empty Queue error!!!!\n"):printf("Get head successful,队头元素为:%d\n",x);

break;

case 0:

exit(0);

break;

default:

printf("ERROR!!\n");

exit(0);

break;

}

}

return 0;

}

/**********************各个子函数功能的实现*********************/

void initQueue(SeqQueue *Q)

{ //将 *Q 初始化为一个空的循环队列

Q->front=Q->rear=0;

Q->flag=0;

}

int enterQueue(SeqQueue *Q,int n) //进队列

{//将元素n入队

int n1,n2;

if((Q->front==Q->rear)&&(Q->flag==1)) return ERROR; //标志队列已经满了

printf("Please enter into the queue elements in turn:\n");

for(n1=0;n1

{

scanf("%d",&n2);

Q->elem[Q->rear]=n2;

Q->rear=(Q->rear+1)%Queue_Size; //重新设置队尾指针

if(Q->front==Q->rear)//此处有两种情况:1.元素没有全部进入队列,空间已经满了 2.元素全部进入队列,空间刚刚好好

{

Q->flag=1; //flag=1:队列空间存满

return ERROR;

}

}

return OK;

}

void deleteQueue(SeqQueue *Q)

{ //删除队列的队头元素

int a;

if((Q->front==Q->rear)&&(Q->flag==0)) //队列为空,删除失败

{

printf("An empty Queue error!!!!\n");

}

else

{

a=Q->elem[Q->front]; //删除前先读取队头元素

Q->front=(Q->front+1)%Queue_Size; //重新设置队头指针

printf("队顶元素%d出队成功.\n",a); //操作成功

if(Q->front==Q->rear) Q->flag=0; //flag=0:队列中的元素全部出队

}

}

int isEmpty(SeqQueue *Q)

{

if((Q->front==Q->rear)&&(Q->flag==0))

{ //判断队列为空,返回OK

return OK;

}

return ERROR; //否则返回ERROR

}

int getHead(SeqQueue *Q,int *x)

{

if((Q->front==Q->rear)&&(Q->flag==0))

{ //队列为空,读取失败

return ERROR;

}

else

{

*x=Q->elem[Q->front]; //操作成功

return OK;

}

}

c语言while队列不为空,C语言实现循环队列的初始化进队出队读取队头元素判空-2...相关推荐

  1. C语言查看队头元素,C语言实现循环队列的初始化进队出队读取队头元素判空-1...

    目前,处在学习数据结构+ing,由于之前学过了队列,今天就把自己写过的代码做了一些完善分享给大家,希望能够帮助到有需要的朋友,有不足的地方欢迎大家交流    φ(゜▽゜*)♪ 队列是另一种限定性的线性 ...

  2. 循环队列的java结构_java数据结构之循环队列(数组实现)

    package com.ws.队列.数组环形队列; //环形数组队列 //判断满:尾+1%队列长度==头 //添加数据:要(尾+1)%数组长度 //取出数据:要(头+1)%数组长度 因为这两个都是循环 ...

  3. Java:List判空的条件:List=null 和 List.size = 0 当需要对一个LIst进行判空操作时我们可使用如下两个语句:

    当需要对一个LIst进行判空操作时我们可使用如下两个语句: if (list == null || list.size() == 0) {} if (list != null && l ...

  4. 队列的顺序数组c语言代码,队列-队列的顺序表示和实现

    队列-队列的顺序表示和实现 和顺序栈相类似,在利用顺序分配存储结构实现队列时,除了用一维数组描述队列中数据元素的存储区域之外,尚需设立两个指针front和rear分别指示"队头"和 ...

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

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

  6. 循环队列c语言的实现,循环队列的C语言实现

    生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题:从生活中,可以抽象出队列的概念,队列就是一个能够实现"先进先出"的存储结构 ...

  7. 队列判空_三分钟基础:什么是队列?

    作者 |  小鹿 来源 |  小鹿动画学编程 写在前边 像线程池.异步队列.消息队列等有限的资源容器中,往往存储大量的任务事件,这些大量的任务事件需要进行有条理的进行任务分发以及各种情况处理,为了能够 ...

  8. 三星手机电池循环清零代码_数据结构(C语言)-循环队列基本操作

    队列是一种先进先出(first in first out,FIFO)的线性表,是一种常用的数据结构. 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列 ...

  9. 队列之循环队列详解(C语言版)

    文章目录 前言 一.循环队列的定义 二.循环队列的结构 三.循环队列的常用操作 结语 附录 前言 大家好,越努力,越幸运.本篇文章小猿将跟您分享数据结构队列中的循环队列,希望对您有所帮助. 一.循环队 ...

最新文章

  1. HDU 2080 夹角有多大II
  2. phpstorm 提示请配置PHP解释器的解决办法
  3. 对javascript闭包的理解
  4. php 会议签到系统_人脸识别会议签到系统有哪些优点?
  5. Spring创建Bean的3种方式
  6. C语言实现类似QQ聊天界面抖动功能
  7. Vue和其他框架的区别
  8. c语言固定长度的字符串,【分享】C语言动态长度字符串
  9. VMware虚拟机扩展Ubuntu系统磁盘空间
  10. JS计算本周一和本周五的日期
  11. 召回率和精确率(recall and precision)
  12. SpringBoot中拦截器
  13. Office online server 部署
  14. 百度——LBS.云 v2.0——云存储的POI创建和删除--Android 源码
  15. Java实现贪吃蛇(汪汪队)游戏,自定义游戏背景音乐,背景图片和游戏图标
  16. IP Routing 概述
  17. C++ 重载、重写及其区别
  18. 我和同事相处的心得。
  19. 实现选择文本时选中整个元素文本
  20. <一>Android Audio音频框架

热门文章

  1. 高桥盾react和boost_gel、react、boost三种材料的跑鞋,哪个更强呢?
  2. 信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
  3. 图论 —— 网络流 —— 费用流 —— 基于 Dijkstra 的费用流
  4. LateX在windows中运用MiKTeX
  5. 42 MM配置-采购-条件-定义工厂层的条件控制
  6. 9.5 LSMW程序创建操作手册 第12 13 14步
  7. linux vi刷新页面,vim的神级配置 - bubifengyun的个人页面 - OSCHINA - 中文开源技术交流社区...
  8. python怎么模拟浏览器交互_python+webdriver 模拟用户交互工具
  9. python版本年份_Python问题:至今的年份和年份?
  10. pytorch学习1:pytorch 定义网络的方式