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. Shell 编程注意点

    (一)判断语句 [$# -lt 4 ]判断语句,格式[空格 比较对象1 比较符号 比较对象2] $# 启动脚本时携带参数个数;参数个数总数. $1 代表第一个参数. $? 最后一次执行名命令的退出状态 ...

  2. js数据类型以及数组字符串常用方法

    JS判断数据类型 例子: var a = "iamstring."; var b = 222; var c= [1,2,3]; var d = new Date(); var e ...

  3. python入门 -- 环境搭建(windows)

    1. 下载Anaconda Anaconda内置了python解释器及经常使用的库,提供了编译好的环境.根据自己的操作系统,自行从下面网站挑选一个较新的版本,下载安装即可. https://mirro ...

  4. SSM 框架搭建

    SSM框架搭建(Spring.SpringMVC.Mybatis) 一:基本概念 Spring :      Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框 ...

  5. 4.20 Linux01

    2019-4-20 21:04:14 day102linux 开始认真学习Linux ,因为服务器部署还是得会Linux 开始整理一下笔记 等把Linux全部学完后 然后写个文章整理一下! Linux ...

  6. Markdown基础语法笔记

    # 一级标题## 二级标题### 三级标题###### #号之后记得加一个空格 仅支持1-6级标题  ### 列表 - 文本1 - 文本2 - 文本3+ 列表2* 列表2 ### 有序列表1. 有序文 ...

  7. data.table包使用应该注意的一些细节

    fread中nThread 参数的使用   注意默认nThread=getDTthreads(),即使用所有能用的核心,但并不是核心用的越多越好,本人亲自测试的情况下,其实单核具有较强的性能,只有在数 ...

  8. MySQL视图更新

    昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全.今天特地搜了一些资料总结一下.本文主要说明视图的更新限制,如需关于视图的更 ...

  9. windows10下Kafka环境搭建

    内容小白,包含JDK+Zookeeper+Kafka三部分.JDK:1)   安装包:Java SE Development Kit 9.0.1      下载地址:http://www.oracle ...

  10. 前端基础之BOM和DOM

    关于网页交互:BOM和DOM javaScript分为ECMAScript,DOM,BOM . BOM(Browser  object  Model)是指浏览器对象模型,它使JavaScript有能力 ...