Code

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

#include<stdio.h>
#include<stdlib.h> #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 :
initQueue(&Q);
break;
case :
int n;
printf("Please enter the number into the queue elements:");
scanf("%d",&n); //读入存入的队列元素个数
//三目运算符根据返回值判断元素是否进队成功
(enterQueue(&Q,n)==)?printf("%d个元素依次进队成功\n",n):printf("%d个元素依次进队失败\n",n);
break;
case :
deleteQueue(&Q);
break;
case : //三目运算符根据返回值判断队列是否为空
(isEmpty(&Q)==)?printf("An empty Queue\n"):printf("Not an empty Queue\n");
break;
case : //三目运算符根据返回值判断队头元素是否读取成功
int x;
(getHead(&Q,&x)==)?printf("An empty Queue error!!!!\n"):printf("Get head successful,队头元素为:%d\n",x);
break;
case :
exit();
break;
default:
printf("ERROR!!\n");
exit();
break;
}
}
return ;
} /**********************各个子函数功能的实现*********************/
void initQueue(SeqQueue *Q)
{ //将 *Q 初始化为一个空的循环队列
Q->front=Q->rear=;
Q->flag=;
}
int enterQueue(SeqQueue *Q,int n) //进队列
{ //将元素n入队
int n1,n2;
if((Q->front==Q->rear)&&(Q->flag==)) return ERROR; //标志队列已经满了
printf("Please enter into the queue elements in turn:\n");
for(n1=;n1<n;n1++) //循环输入元素进入队列
{
scanf("%d",&n2);
Q->elem[Q->rear]=n2;
Q->rear=(Q->rear+)%Queue_Size; //重新设置队尾指针
if(Q->front==Q->rear) //此处有两种情况:1.元素没有全部进入队列,空间已经满了 2.元素全部进入队列,空间刚刚好好
{
Q->flag=; //flag=1:队列空间存满
return ERROR;
}
}
return OK;
}
void deleteQueue(SeqQueue *Q)
{ //删除队列的队头元素
int a;
if((Q->front==Q->rear)&&(Q->flag==)) //队列为空,删除失败
{
printf("An empty Queue error!!!!\n");
}
else
{
a=Q->elem[Q->front]; //删除前先读取队头元素
Q->front=(Q->front+)%Queue_Size; //重新设置队头指针
printf("队顶元素%d出队成功.\n",a); //操作成功
if(Q->front==Q->rear) Q->flag=; //flag=0:队列中的元素全部出队
}
} int isEmpty(SeqQueue *Q)
{
if((Q->front==Q->rear)&&(Q->flag==))
{ //判断队列为空,返回OK
return OK;
}
return ERROR; //否则返回ERROR
} int getHead(SeqQueue *Q,int *x)
{
if((Q->front==Q->rear)&&(Q->flag==))
{ //队列为空,读取失败
return ERROR;
}
else
{
*x=Q->elem[Q->front]; //操作成功
return OK;
}
}

C语言实现循环队列的初始化&进队&出队&读取队头元素&判空-2的更多相关文章

  1. C语言实现链队列的初始化&进队&出队

    /*链表实现队列的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typed ...

  2. C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-循环队列的实现-C语言 #define MAXSIZE 100 //循环队列的存储结构 typedef struct { int* base; //基地址 int _front; //头 ...

  3. C语言实现循环队列

    今日在处理数据存储的问题中,数据占用的空间较大,在询问之下,提及循环队列. 没有学习过的我,想想就是头大,只能慢慢从网上找资料,一个字母一个字母的敲,最后,还是慢慢的对队列有了一些理解 对于循环队列有 ...

  4. C语言实现 循环队列

    #include <stdio.h>#include <stdlib.h>#include <stdbool.h> typedef struct queue{ in ...

  5. C语言实现链栈的初始化&进栈&出栈&读取栈顶元素

    /*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...

  6. C语言实现顺序栈的初始化&进栈&出栈&读取栈顶元素

    /*顺序表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define Stack_Size 50 //设栈中元素个数为50 ...

  7. 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现

    一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...

  8. 使用java语言实现一个队列(两种实现比较)(数据结构)

    一.什么是队列,换句话说,队列主要特征是什么? 四个字:先进先出 六个字:屁股进,脑袋出 脑补个场景:日常排队买饭,新来的排在后面,前面打完饭的走人,这就是队列: OK,思考一个问题,我为什么写了两种 ...

  9. 三 基于Java数组手写循环队列

    Code: package dataStucture2.stackandqueue; /** * 手写循环队列 * * @param <E> */ public class MyLoopQ ...

随机推荐

  1. ie低版本内核事件兼容问题(事件绑定,绑定事件自动执行,文档模式问题)

    问题情况 搜狗等,兼容模式下,以前前端写的点击事件的代码没有, 后来一看是因为兼容模式为9,导致点击事件失效 解决办法,步骤 1,处理绑定事件兼容问题 ie低版本绑定事件只支持attactevent, ...

  2. Kafka 安装配置

    1. 下载安装kafka 下载地址:http://apache.fayea.com/kafka/ 解压安装包 tar zxvf kafka_版本号.tgz 2. 配置 修改kafka的config/s ...

  3. netcore应用程序部署程序到ubuntu

    运维需求:获取服务器的运行情况,是否CPU.内存较高等,上报到运维系统 环境:ubuntu16.04 工具::netcore2.1.supervisor 程序实现(代码就不贴了)参考:https:// ...

  4. vuejs小白入门

    后端做不好,是时候学习一下前端了,听说在很流行vue,那么久跟风学习一波. unbuntu下安装npm,然后安装node,这应该算是开发工具或者执行引擎吧. 感觉web前端框架怎么变,都是对html, ...

  5. java数组和集合的相互转换

    由于在学习过程中经常碰到这么一个问题,就是java中几种装数据的容器之间的转换,所以写了这篇随笔专门来总结这些转换方法. 数组转集合: 1.遍历,最常用的方法,但是过程会繁琐一点 int arrs[] ...

  6. mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复

    1.索引: 索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容. 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进 ...

  7. 使用 python 实现π的计算

    1.π的神奇 π是一个无数人追随的真正的神奇数字.我不是很清楚一个永远重复的无理数的迷人之处.在我看来,我乐于计算π,也就是计算π的值.因为π是一个无理数,它是无限的.这就意味着任何对π的计算都仅仅是 ...

  8. High Availability手册(2): 架构

    最底层是通信层corosync/openais 负责cluster中node之间的通信 上一层是Resource Allocation Layer,包含下面的组件: CRM Cluster Resou ...

  9. QEMU KVM Libvirt手册(9): network

    虚拟网卡由-net nic定义 # qemu-system-x86_64 -enable-kvm -name ubuntutest  -m 2048 -hda ubuntutest.img -vnc ...

  10. 算法与数据结构(七) AOV网的拓扑排序(Swift版)

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...