本周的作業要求:
1.給出循環隊列的存儲結構定義。
2.完成循環隊列的基本操作函數。
1) 初始化循環隊列;
2) 建立循環隊列;
3) 實現入隊和出隊操作;
4) 采用下面兩種方法實現對滿和隊空的判斷操作:
方法一:修改隊滿條件,浪費一個元素空間,隊滿時數組中只有一個空閑單元(必做);
方法二:設置標志flag,當front==rear且flag=0時為隊空,當front==rear且flag=1時為隊滿 (必做);
方法二:設置標志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);
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;
}
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;
}SeqQueue;
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;
}
