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 ...
随机推荐
- python练习题目
1.查看本机安装python版本 2.用python打印"Hello World",给出源代码和执行结果 a.命令行窗口输出(前提:python程序加入PATH系统环境变量) b. ...
- Jquery weui picker 支持label和value
万年没更新了. 最近用jquery weui. 在使用picker时需要一些问题. 就是让picker 显示label, 但是取值的时候取value用于存储. 官网例子如下 Jquery-weui 官 ...
- day11函数(形参实参)
形参与实参 def fn(形参们): pass # 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合 # 注: ...
- 为什么导入本地jquery.js老是无效?(已解决)
我从jquery官网里复制过来jquery.js内容,然后粘贴到本地,但是引用的时候总是无效. 在翻看脚本所在目录,无意间发现脚本文件是个jquery.js.js, 原来是我的文件的扩展名的问题 ...
- Object-C 编程问题汇总
Object-C 编程问题汇总 Cocopods 安装时遇见的问题: error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, ...
- 解决Visual Studio 加载符号卡死情况
VS 加载符号 过慢或卡死的情况都可以用这种方法 打开VS的[工具]-[选项]-[调试]-[符号], 如下图所示: 1. 先取消勾选 ”Microsoft符号服务器” 2. 再点击 “清空符号缓存” ...
- Lesson 25 Do the English speak English?
Text I arrived London at last. The railway station was big, black and dark. I did not know the way t ...
- JVM,Tomcat与OSGi类加载机制比较
首先一个思维导图来看下Tomcat的类加载机制和JVM类加载机制的过程 类加载 在JVM中并不是一次性把所有的文件都加载到,而是一步一步的,按照需要来加载. 比如JVM启动时,会通过不同的类加载器加载 ...
- [Swift]LeetCode52. N皇后 II | N-Queens II
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- [Swift]LeetCode150. 逆波兰表达式求值 | Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...