两种方法实现队满和队空的判断操作(循环队列)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

两种⽅法实现队满和队空的判断操作(循环队列)本周的作业要求:
1.给出循环队列的存储结构定义。

2.完成循环队列的基本操作函数。

1) 初始化循环队列;
2) 建⽴循环队列;
3) 实现⼊队和出队操作;
4) 采⽤下⾯两种⽅法实现对满和队空的判断操作:
⽅法⼀:修改队满条件,浪费⼀个元素空间,队满时数组中只有⼀个空闲单元(必做);
⽅法⼆:设置标志flag,当front==rear且flag=0时为队空,当front==rear且flag=1时为队满(必做);
3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和⾮法数据的输出结果;
4.程序调试运⾏并保存输出结果;
5.提交实验作业。

⽅法⼀:修改队满条件,浪费⼀个元素空间,队满时数组中只有⼀个空闲单元(必做);
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define MAXSIZE 50
typedef struct
{
char a[MAXSIZE];
int front;
int rear;
}SeqQueue;
int flag=0;
void deng(SeqQueue *Q);
void duiman(SeqQueue *Q)
{
printf("队满,插⼊失败,返回登录界⾯\n");
deng(Q);
}
void duikong(SeqQueue *Q)
{
printf("队空,⽆元素出队,返回登陆界⾯\n");
flag=0;
deng(Q);
}
void EnterQueue(SeqQueue *Q,char x)
{
if((Q->rear +1)%MAXSIZE==Q->front)
duiman(Q);
Q->a[Q->rear]=x;
Q->rear=(Q->rear+1)%MAXSIZE;
return;
}
void DeleteQueue(SeqQueue *Q)
{
char x;
if(Q->front==Q->rear)
duikong(Q);
x=Q->a[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
if(flag==0){
flag=1;
DeleteQueue(Q);
}else
printf("出队的队头元素为%c\n",x);
}
void ru(SeqQueue *Q)
{
printf("输⼊⼊队元素以$结束\n");
char En[MAXSIZE];
int i;
for(i=0;i<MAXSIZE;i++){
scanf("%c",&En[i]);
if(En[i]!='$'){
EnterQueue(Q,En[i]);
}
else
break;
}
printf("⼊队成功!\n");
deng(Q);
}
void InitQueue(SeqQueue *Q)
{
Q->front=Q->rear=0;
}
void deng(SeqQueue *Q)
{
printf("1.⼊队\n");
printf("2.使队头元素出队,并返回它的值\n");
printf("3.退出\n");
int a;
scanf("%d",&a);
switch(a)
{
case 1:
system("CLS");
ru(Q);
case 2:
system("CLS");
DeleteQueue(Q);
case 3:
exit(0);
default:
printf("输⼊不合法,请重新输⼊\n");
deng(Q);
}
}
int main()
{
SeqQueue Q;
InitQueue(&Q);
deng(&Q);
return 0;
}
⽅法⼆:设置标志flag,当front==rear且flag=0时为队空,当front==rear且flag=1时为队满(必做);#include <cstdio>
#include <cstdlib>
#include <cstring>
#define MAXSIZE 50
typedef struct
{
char a[MAXSIZE];
int front;
int rear;
int flag=0,tag=0;
void deng(SeqQueue *Q);
void duiman(SeqQueue *Q)
{
printf("队满,插⼊失败,返回登录界⾯\n"); deng(Q);
}
void duikong(SeqQueue *Q)
{
printf("队空,⽆元素出队,返回登陆界⾯\n"); flag=0;
deng(Q);
}
void EnterQueue(SeqQueue *Q,char x)
{
if(tag==1&&Q->front==Q->rear)
duiman(Q);
Q->a[Q->rear]=x;
Q->rear=(Q->rear+1)%MAXSIZE;
return;
}
void DeleteQueue(SeqQueue *Q)
{
char x;
if(tag==0&&Q->front==Q->rear)
duikong(Q);
x=Q->a[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
if(flag==0){
flag=1;
DeleteQueue(Q);
}else{
tag=0;
printf("出队的队头元素为%c\n",x);
}
deng(Q);
}
void ru(SeqQueue *Q)
{
printf("输⼊⼊队元素以$结束\n");
char En[MAXSIZE];
int i;
for(i=0;i<MAXSIZE;i++){
scanf("%c",&En[i]);
if(En[i]!='$'){
EnterQueue(Q,En[i]);
}
else
break;
}
tag=1;
printf("⼊队成功!\n");
deng(Q);
}
void InitQueue(SeqQueue *Q)
{
Q->front=Q->rear=0;
}
void deng(SeqQueue *Q)
{
printf("1.⼊队\n");
printf("2.使队头元素出队,并返回它的值\n"); printf("3.退出\n");
int a;
scanf("%d",&a);
switch(a)
{
case 1:
system("CLS");
ru(Q);
case 2:
system("CLS");
DeleteQueue(Q);
case 3:
exit(0);
default:
printf("输⼊不合法,请重新输⼊\n");
deng(Q);
}
}
int main()
{
SeqQueue Q;
InitQueue(&Q);
deng(&Q);
return 0;
}。

相关文档
最新文档