本周的作業要求:
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; }