C语言实现循环队列的初始化&进队&出队&读取队头元素&判空-2
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的更多相关文章
- C语言实现链队列的初始化&进队&出队
/*链表实现队列的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typed ...
- C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-循环队列的实现-C语言 #define MAXSIZE 100 //循环队列的存储结构 typedef struct { int* base; //基地址 int _front; //头 ...
- C语言实现循环队列
今日在处理数据存储的问题中,数据占用的空间较大,在询问之下,提及循环队列. 没有学习过的我,想想就是头大,只能慢慢从网上找资料,一个字母一个字母的敲,最后,还是慢慢的对队列有了一些理解 对于循环队列有 ...
- C语言实现 循环队列
#include <stdio.h>#include <stdlib.h>#include <stdbool.h> typedef struct queue{ in ...
- C语言实现链栈的初始化&进栈&出栈&读取栈顶元素
/*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...
- C语言实现顺序栈的初始化&进栈&出栈&读取栈顶元素
/*顺序表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define Stack_Size 50 //设栈中元素个数为50 ...
- 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现
一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...
- 使用java语言实现一个队列(两种实现比较)(数据结构)
一.什么是队列,换句话说,队列主要特征是什么? 四个字:先进先出 六个字:屁股进,脑袋出 脑补个场景:日常排队买饭,新来的排在后面,前面打完饭的走人,这就是队列: OK,思考一个问题,我为什么写了两种 ...
- 三 基于Java数组手写循环队列
Code: package dataStucture2.stackandqueue; /** * 手写循环队列 * * @param <E> */ public class MyLoopQ ...
随机推荐
- WWH——学习方法理解与分析
WWH是"What+Why+How"的简称,是对学习方法最完美的概括."如果不按照WWH这种模式来教学,90%的结果是老师没教好,学生学不好." 1.What( ...
- [POJ3630]Phone List (Tire)
题意 trie字典树模板 LOJ有中文翻译https://loj.ac/problem/10049 思路 TIRE 代码 之前在LOJ上做过 直接交了 #include<cstdio> # ...
- Python(Django)遇到的问题及解决方法
问题一 因为已经有程序占用了Django的默认端口了,所以只要这么启动项目,81是使用的端口,然后访问即可http://127.0.0.1:81/ 解决: 问题二 TypeError: not eno ...
- 将JSON格式数据转换为javascript对象 JSON.parse()
<html><body><h2>通过 JSON 字符串来创建对象</h3><p>First Name: <span id=" ...
- FTP连接超时
今天程序在连接FTP服务器,突然无法连接,用Windows 的 Explorer能正常连接,但用 WebRequest.WebResponse连接时,总是抛出连接超时异常. 后查找相关资料,原因是:程 ...
- vs2012,打开早期版本窗体错误
<runtime> <NetFx40_LegacySecurityPolicy enabled="true"/></runtime>
- vue 源码学习二 实例初始化和挂载过程
vue 入口 从vue的构建过程可以知道,web环境下,入口文件在 src/platforms/web/entry-runtime-with-compiler.js(以Runtime + Compil ...
- C# 异步编程之 Task 的使用
(说明:随笔内容为学习task的笔记,资料来源:https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task?redi ...
- Java_重载与重写
在java中,重载与重写都是多态的体现.重载(Overload)体现的是编译时多态,而重写(Override)体现了运行时多态. 重载(Overload): 定义:在一个类中,同名的方法如果有不同的参 ...
- Qt5+MSVC2015编译器编译发布的Release程序运行崩溃,如何查找崩溃的原因??
除了加log信息,还有什么方法?? ==================================2019/4/26============================= 1 常见的c++内 ...