大數(shù)據(jù)結(jié)構(gòu)隊(duì)列實(shí)驗(yàn)報(bào)告材料

上傳人:沈*** 文檔編號(hào):83800408 上傳時(shí)間:2022-05-02 格式:DOC 頁(yè)數(shù):58 大小:2.73MB
收藏 版權(quán)申訴 舉報(bào) 下載
大數(shù)據(jù)結(jié)構(gòu)隊(duì)列實(shí)驗(yàn)報(bào)告材料_第1頁(yè)
第1頁(yè) / 共58頁(yè)
大數(shù)據(jù)結(jié)構(gòu)隊(duì)列實(shí)驗(yàn)報(bào)告材料_第2頁(yè)
第2頁(yè) / 共58頁(yè)
大數(shù)據(jù)結(jié)構(gòu)隊(duì)列實(shí)驗(yàn)報(bào)告材料_第3頁(yè)
第3頁(yè) / 共58頁(yè)

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《大數(shù)據(jù)結(jié)構(gòu)隊(duì)列實(shí)驗(yàn)報(bào)告材料》由會(huì)員分享,可在線閱讀,更多相關(guān)《大數(shù)據(jù)結(jié)構(gòu)隊(duì)列實(shí)驗(yàn)報(bào)告材料(58頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、word 隊(duì)列實(shí)驗(yàn)報(bào)告 小組成員:xxxxxxxx日期:xxxxxxxx 一、 需求分析〔xxx〕 1. 鏈隊(duì)列 1) 在本演示程序中,首先要鏈隊(duì)列添加一個(gè)頭結(jié)點(diǎn),并判斷隊(duì)列是否為空,它只允許在表的一端進(jìn)展插入,而在另一端刪除元素,允許插入的一段叫隊(duì)尾,允許刪除的一端如此為對(duì)頭,接著訪問(wèn)隊(duì)列中所有元素,并輸出,輸出是每個(gè)元素之間用空格來(lái)完成。最后銷毀隊(duì)列,釋放空間。 2) 演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“歡迎來(lái)到鏈隊(duì)列〞“元素入隊(duì)〞“元素出隊(duì)〞“銷毀隊(duì)列〞“清空隊(duì)列〞之后。由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令,相應(yīng)的運(yùn)算數(shù)據(jù)和顯示結(jié)果顯示在其后。

2、 3) 程序執(zhí)行的命令包括: 歡迎來(lái)到鏈隊(duì)列 1輸出隊(duì)列長(zhǎng)度 2元素入隊(duì) 3元素出隊(duì) 4銷毀隊(duì)列 5清空隊(duì)列 6對(duì)頭元素 7退出鏈隊(duì)列 4) 測(cè)試數(shù)據(jù) 入隊(duì) 1 2 3 4 5 分別執(zhí)行“元素入隊(duì)〞“元素出隊(duì)〞“銷毀隊(duì)列〞“清空隊(duì)列〞等操作。 2. 順序隊(duì)列 1) 在本演示程序中,首先要順序隊(duì)列添加一個(gè)頭結(jié)點(diǎn),并判斷隊(duì)列是否為空,它只允許在表的一端進(jìn)展插入,而在另一端刪除元素,允許插入的一段叫隊(duì)尾,允許刪除的一端如此為對(duì)頭,接著訪問(wèn)隊(duì)列中所有元素,并輸出,輸出是每個(gè)元素之間用空格來(lái)完成。 2) 演示程序以用戶和計(jì)算機(jī)的

3、對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“歡迎來(lái)到鏈隊(duì)列〞“元素入隊(duì)〞“元素出隊(duì)〞“取得頭結(jié)點(diǎn)〞“輸出顯示〞之后。由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令,相應(yīng)的運(yùn)算數(shù)據(jù)和顯示結(jié)果顯示在其后。 3〕程序執(zhí)行的命令包括: 歡迎來(lái)到順序隊(duì)列 1入隊(duì) 2出隊(duì) 3判斷是否為空 4取得頭結(jié)點(diǎn) 5輸出顯示 6退出順序隊(duì)列 4〕測(cè)試數(shù)據(jù) 入隊(duì) 1 2 3 4 5 分別執(zhí)行“元素入隊(duì)〞“元素出隊(duì)〞等操作。 3循環(huán)隊(duì)列 1〕在本演示程序中,首先要順序隊(duì)列添加一個(gè)頭結(jié)點(diǎn),并判斷隊(duì)列是否為空,初始化建空隊(duì)列時(shí),令front=rear=0,每當(dāng)插入

4、新的隊(duì)列尾元素時(shí),“尾指針增1〞;每當(dāng)刪除隊(duì)列頭元素時(shí),“頭指針增1〞。 接著訪問(wèn)隊(duì)列中所有元素,并輸出,輸出是每個(gè)元素之間用空格來(lái)完成。 2) 演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“歡迎來(lái)到鏈隊(duì)列〞“元素入隊(duì)〞“元素出隊(duì)〞“取得頭結(jié)點(diǎn)〞“輸出顯示〞之后。由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令,相應(yīng)的運(yùn)算數(shù)據(jù)和顯示結(jié)果顯示在其后。 3〕程序執(zhí)行的命令包括: 歡迎來(lái)到循環(huán)隊(duì)列 1入隊(duì) 2出隊(duì) 3判斷是否為空 4取得頭結(jié)點(diǎn) 5輸出顯示 6退出順序隊(duì)列 4〕測(cè)試數(shù)據(jù) 入隊(duì) 1 2 3 4 5 分別執(zhí)行

5、“元素入隊(duì)〞“元素出隊(duì)〞等操作。 二. 概要設(shè)計(jì)(xxxx) ⒈ 為實(shí)現(xiàn)上述算法,需要順序表的抽象數(shù)據(jù)類型,抽象數(shù)據(jù)類型定義如下: ADT Queue { 數(shù)據(jù)對(duì)象:D={ ai|ai∈ElemSet, i=1,2,3...,n, n>=0 } 數(shù)據(jù)關(guān)系: R={ |ai-1,ai∈D,i=2,...,n } 根本操作: InitQueue (&Q) 操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列。 DestroyQueue (&Q) 初始條件:隊(duì)列Q已存在。 操作結(jié)果:隊(duì)列Q已被銷毀。 ClearQueue(&Q) 初始條件:隊(duì)列

6、Q已存在。 操作結(jié)果:將Q清為空隊(duì)列。 QueueEmpty(Q) 初始條件:隊(duì)列Q已存在。 操作結(jié)果:假如Q為空隊(duì)列,如此返回TRUE,否如此FALSE。 QueueLength(Q) 初始條件:隊(duì)列Q已存在。 操作結(jié)果:返回Q元素的個(gè)數(shù),即隊(duì)列的長(zhǎng)度。 GetHead(Q,&e) 初始條件:Q為非空隊(duì)列。 操作結(jié)果:用e返回Q的隊(duì)頭元素。 EnQueue (&Q,e) 初始條件:隊(duì)列Q已存在。 操作結(jié)果:插入e返回Q的新的隊(duì)尾元素。 DeQueue (&Q,&e) 初

7、始條件:Q為非空隊(duì)列。 操作結(jié)果:刪除Q的隊(duì)頭元素,并用e返回其值。 }ADT Queue typedef struct QNode { QElemType; struct QNode *next;//指針域 }QNode,*QueuePtr; Typedef struct{ QueuePtr front; QueuePtr rear; }LinkQueue; Status InitQueue (LinkQueue&Q) //構(gòu)造一個(gè)空隊(duì)列。 Status DestroyQueue (LinkQueue&Q) //銷毀隊(duì)列Q,

8、Q不存在。 Status ClearQueue(LinkQueue&Q) //將Q清為空隊(duì)列。 Status QueueEmpty(LinkQueueQ) //假如Q為空隊(duì)列,如此返回TRUE,否如此FALSE。 int QueueLength(LinkQueueQ) //返回Q元素的個(gè)數(shù),即隊(duì)列的長(zhǎng)度。 Status GetHead(LinkQueueQ,QElemType&e) //假如隊(duì)列不為空,如此用e返回Q的隊(duì)頭元素,并返回OK;否如此返回ERROR。 Status EnQueue (LinkQueue&

9、Q,QElemType e) //插入e返回Q的新的隊(duì)尾元素。 Status DeQueue (LinkQueue&Q,QElemType&e) //假如隊(duì)列不空,如此刪除Q的隊(duì)頭元素,并用e返回其值,并返回OK;否如此返回ERROR。 三.詳細(xì)設(shè)計(jì)〔xxx〕 1. 順序隊(duì)列的實(shí)現(xiàn)和運(yùn)算 1〕元素的類型 typedef struct { Datatype data[MAXSIZE]; int front,rear; }Squeue; 2〕空的隊(duì)列的構(gòu)造 void InitSqueue(Squeue *p) /*初始化隊(duì)列*/ {

10、 p->front=0; p->rear=0; } 3〕元素的入隊(duì) int Ensqueue1(Squeue1 *q, Datatype e) /*入隊(duì)*/ { if((q->rear+1)% MAXSIZE == q->front) { printf("\n隊(duì)列已滿\n"); return 0; } 4〕元素的出隊(duì) int DeSqueue1(Squeue1 *q,Datatype *e) /*出隊(duì)*/ { if (q->front==q->rear) { printf("隊(duì)列已空,無(wú)法出隊(duì)!"); return 0;

11、 } *e=q->data[q->front]; q->front=(q->front+1)%MAXSIZE; return 1; } 5〕判斷隊(duì)列是否為空 int QueueEmpty1(Squeue1 q) // 判斷是否為空 { if (q.front==q.rear) return 1; else return 0; } 6〕隊(duì)頭元素的取值的算法 int Gethead1(Squeue1 *q,Datatype *e) // 取對(duì)頭元素 {

12、 if (q->front==q->rear) { printf("隊(duì)列已空,無(wú)法出隊(duì)!"); return 0; } else *e=q->data[q->front]; return 1; } 7〕遍歷順序隊(duì)列的算法 void display1(Squeue1 q) //遍歷順序?qū)α? { printf("此隊(duì)列數(shù)據(jù)為:\n"); if (q.front==q.rear) printf(

13、"此隊(duì)列為空!"); else { while(q.front < q.rear) { printf("%d\t", q.data[q.front]); q.front=(q.front+1)%MAXSIZE; } printf("\n"); } 2. 鏈?zhǔn)疥?duì)列的實(shí)現(xiàn)和運(yùn)算 1〕構(gòu)造空隊(duì)列的算法 void InitQueue2(LinkQueue *q) { // 構(gòu)造一個(gè)空隊(duì)列Q q->front=q->rear=malloc(sizeof(QNode)); if(!q->front) exit(1

14、); q->front->next=NULL; } 2〕元素的入隊(duì)算法 void EnQueue2(LinkQueue *q, QElemType e)//將元素e進(jìn)隊(duì) { QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode));//創(chuàng)建新節(jié)點(diǎn) if(!p)//如果內(nèi)存分配成功 exit(1); p->data=e;//初始化新節(jié)點(diǎn)數(shù)據(jù)為e p->next=NULL; q->rear->next=p; q->rear=p; } 3〕元素的出隊(duì)的算法 int DeQueue2(Link

15、Queue *q,QElemType e)//隊(duì)頭結(jié)點(diǎn)出隊(duì),將出隊(duì)的元素存入e { QueuePtr p; if(q->front==q->rear)//隊(duì)列為空 return 0; p=q->front->next;//初始化temp為要出隊(duì)的結(jié)點(diǎn)指針 if(q->front->next==q->rear)//要出隊(duì)的結(jié)點(diǎn)為最后一個(gè)結(jié)點(diǎn) q->rear=q->front; e=p->data;//要出隊(duì)的數(shù)據(jù)元素為e q->front->next=p->next;//使下一個(gè)結(jié)點(diǎn)變?yōu)閷?duì)頭 free(p);//刪除要出隊(duì)的結(jié)點(diǎn) return e;

16、 } 4〕隊(duì)列的長(zhǎng)度算法 void QueueLength2(LinkQueue *q)//返回隊(duì)列長(zhǎng)度 { QueuePtr p; int i=0; p=q->front->next; while(p) { ++i; p=p->next; } printf("鏈隊(duì)列長(zhǎng)度為:%d\n",i); } 5〕隊(duì)列的銷毀 void DestroyQueue2(LinkQueue *q) { while(q->front) { q->rear=q->front->next; free(q->front); q->f

17、ront=q->rear; if(!q->rear) free(q->rear); } free(q->front); } 6〕隊(duì)列的輸出算法 void output2(LinkQueue *q)//輸出隊(duì)列 { QueuePtr p; p=q->front->next; printf("鏈隊(duì)列元素依次為:"); while(p) { printf("%d->",p->data); p=p->next; } printf("\n"); } 7〕隊(duì)列的清空的算法 void Clear2(LinkQueue *q)//

18、清空隊(duì)列 { QueuePtr temp=q->front->next; while(temp) { QueuePtr tp=temp; temp=temp->next; free(tp); } temp=q->front; q->front=q->rear=NULL; free(temp); } 8〕返回對(duì)頭元素的算法 int GetHead2(LinkQueue *q, int *e)//返回對(duì)頭結(jié)點(diǎn)元素,存入e { if(q->front==q->rear) return 0; *e=q->front->next

19、->data; return 1; } 3. 循環(huán)隊(duì)列的實(shí)現(xiàn)和運(yùn)算 1〕隊(duì)列的初始化算法 void InitSqueue3(Squeue3 *p) /*初始化隊(duì)列*/ { p->base=(Datatype *)malloc(sizeof(Datatype)* MAXSIZE); p->front=0; p->rear=0; } 2〕入隊(duì)的算法 int Ensqueue3(Squeue3 *q, Datatype e) /*入隊(duì)*/ { if((q->rear+1)% MAXSIZE == q->front) { printf("

20、\n隊(duì)列已滿\n"); return 0; } else q->base[q->rear]=e;/*將接收到得值付給隊(duì)尾所指的節(jié)點(diǎn)*/ q->rear=(q->rear+1) % MAXSIZE;/*隊(duì)尾向后移一位完成入隊(duì)*/ return 1; } 3〕出隊(duì)的算法 int DeSqueue3(Squeue3 *q,Datatype *e) /*出隊(duì)*/ { if (q->front==q->rear) { printf("隊(duì)列已空,無(wú)法出隊(duì)!"); return 0; } *e=q->base[q->

21、front]; q->front=(q->front+1)%MAXSIZE; return 1; } 4判斷隊(duì)列是否為空的算法 int QueueEmpty3(Squeue3 q) // 判斷是否為空 { if (q.front==q.rear) return 1; else return 0; } 5〕對(duì)頭元素的返還的算法 int Gethead3(Squeue3 *q,Datatype *e) // 取對(duì)頭元素 { if (q->front

22、==q->rear) { printf("隊(duì)列已空,無(wú)法出隊(duì)!"); return 0; } else *e=q->base[q->front]; return 1; } 6〕遍歷循環(huán)隊(duì)列的算法 void display3(Squeue3 *q) //遍歷循環(huán)對(duì)列 { int tail; tail=q->front; printf("此隊(duì)列數(shù)據(jù)為:\n"); if (q->front==q->rear)

23、 printf("此隊(duì)列為空!"); else { while(tail!=q->rear) { printf("%d\t", q->base[tail]); tail=(tail+1)%MAXSIZE; } printf("\n"); } } void main() { int choice; Datatype e1; int i1,a1,x1,s1,j1; //順序隊(duì)列定義的量 int e2,i2,n2,s2,a2; //鏈隊(duì)列定

24、義的量 int i3,a3,x3,s3,j3; //循環(huán)隊(duì)列定義的量 Datatype e3; Squeue1 Q1; //******************************* LinkQueue q; //******************************** Squeue3 Q; //**************************** choice=-1; Begin(); while(choice!=0) { scanf

25、("%d",&choice); switch(choice) { case 1://順序隊(duì)列 { system("cls"); InitSqueue1(&Q1); printf("創(chuàng)建隊(duì)列完成!\n"); printf("請(qǐng)輸入數(shù)據(jù)個(gè)數(shù)j1="); scanf("%d",&j1); for(i1=1; i1<=j1;i1++) //輸入的數(shù)據(jù)個(gè)數(shù)不要超過(guò)MAXSIZE,多了的局部沒(méi)有插入隊(duì)列 { prin

26、tf("請(qǐng)輸入第%d個(gè)數(shù)據(jù):",i1); scanf("%d",&a1); Ensqueue1(&Q1,a1); } printf("對(duì)頭為:%d\n",Q1.data[Q1.front]); printf("隊(duì)尾為:%d\n",Q1.data[Q1.front+j1-1]); display1(Q1); s1=-1; start1

27、(); while(s1!=0) { scanf("%d",&s1); switch(s1) { case 0: system("cls"); choice=-1; Begin(); break; case 1: { system("cls");

28、 printf("請(qǐng)輸入入隊(duì)元素:\n "); scanf("%d",&x1); Ensqueue1(&Q1,x1); display1(Q1); s1=-1; start1(); break; } case 2: { system("cls"); DeSqueue1(&Q1

29、,&e1); display1(Q1); s1=-1; start1(); break; } case 3: { system("cls"); if(QueueEmpty1(Q1)) printf("此隊(duì)列為空!\n");

30、 else printf("此隊(duì)列不為空!\n"); } s1=-1; start1(); break; case 4: { system("cls"); Gethead1(&Q1,&e1); printf("對(duì)頭元素為:%d\n",e1); s1=-1;

31、 start1(); break; } case 5: { system("cls"); display1(Q1); s1=-1;

32、 start1(); break; } }//switch } //while }//case1 break; //************************************************* case 2: { system("cls"); InitQueue2(&q); printf("創(chuàng)建隊(duì)列完成!\n"); printf

33、("輸入將建立鏈隊(duì)列元素的個(gè)數(shù):n2="); scanf("%d",&n2); printf("請(qǐng)輸入隊(duì)列的元素:\n"); for(i2=1;i2<=n2;i2++) { printf("請(qǐng)輸入第%d個(gè)元素:",i2); scanf("%d",&e2); EnQueue2(&q,e2); } a2=-1;

34、 start2(); while(a2!=0) { scanf("%d",&a2); switch(a2) { case 1:system("cls"); QueueLength2(&q); a2=-1; start2(); break; case 2:{ system("cls

35、"); printf("請(qǐng)輸入入隊(duì)元素:"); scanf("%d",&e2); EnQueue2(&q,e2); output2(&q); a2=-1; start2(); }break; case 3: system("cls"); e2=DeQueue2(&q,e2); output2(&q); printf("出隊(duì)元素為:%d\n",e2); a2=-1;

36、 start2(); break; case 4:DestroyQueue2(&q); printf("隊(duì)列已銷毀!\n"); a2=0; system("cls"); choice=-1; Begin(); break; case 5: Clear2(&q); printf("隊(duì)列已清空\(chéng)n"); a2=0; system("cls");

37、 choice=-1; Begin(); break; case 6: system("cls"); GetHead2(&q,&e2); printf("隊(duì)頭元素為:%d\n",e2); s2=-1; start2(); break; case 0: system("cls"); choice=-1; Begin(); break;

38、 }//switch }//while }//case2 break; //************************************************** case 3: { system("cls"); InitSqueue3(&Q); printf("創(chuàng)建隊(duì)列完成!\n"); printf("請(qǐng)輸入數(shù)據(jù)個(gè)數(shù)j3="); scanf("%d",&j3);

39、 for(i3=1; i3<=j3;i3++) //輸入的數(shù)據(jù)個(gè)數(shù)不要超過(guò)MAXSIZE,多了的局部沒(méi)有插入隊(duì)列 { printf("請(qǐng)輸入第%d個(gè)數(shù)據(jù):",i3); scanf("%d",&a3); Ensqueue3(&Q,a3); } printf("對(duì)頭為:%d\n",Q.base[Q.front]);

40、printf("隊(duì)尾為:%d\n",Q.base[Q.front+j3-1]); display3(&Q); s3=-1; start3(); while(s3!=0) { scanf("%d",&s3); switch(s3) { case 0:

41、 system("cls"); choice=-1; Begin(); break; case 1: { system("cls"); printf("請(qǐng)輸入入隊(duì)元素:\n "); scanf("%d",&x3); Ensqueue3(&Q,x3); display3(&Q); s3=-1;

42、 start3(); break; } case 2: { system("cls"); DeSqueue3(&Q,&e3); display3(&Q); s3=-1; start3(); break; } case 3:

43、 { system("cls"); if(QueueEmpty3(Q)) printf("此隊(duì)列為空!\n"); else printf("此隊(duì)列不為空!\n"); } s3=-1; start3(); break; case 4:

44、 { system("cls"); Gethead3(&Q,&e3); printf("對(duì)頭元素為:%d\n",e3); s3=-1; start3(); break; } case 5: {

45、 system("cls"); display3(&Q); s3=-1; start3(); break; } }//switch } //while }//case 3 break; case 0: printf("

46、 謝謝使用!!!!\n"); break; //*************************** }//switch }//while }//main 四. 調(diào)試分析〔xxx〕 順序隊(duì)列 1. 編譯并調(diào)試,運(yùn)行程序。 2. 設(shè)計(jì)測(cè)試用例,分析測(cè)試結(jié)果,以驗(yàn)證所完成的系統(tǒng)是否達(dá)到預(yù)期效果。 3.判斷隊(duì)列是否為空。隊(duì)列是否為空的標(biāo)志就是隊(duì)頭指針和隊(duì)尾指針是否同時(shí)指向隊(duì)列中的同一個(gè)位置,即隊(duì)頭指針和隊(duì)尾指針是否相等。 4.隊(duì)列滿時(shí)候不能入隊(duì)列,否如此會(huì)出現(xiàn)溢出現(xiàn)象。即先要判斷隊(duì)列是否已經(jīng)已滿,因?yàn)殛?duì)尾指針的最大值是MAXQSIZE,

47、所以通過(guò)檢查隊(duì)尾指針rear是否等于MAXQSIZE來(lái)判斷隊(duì)列是否已滿。在刪除隊(duì)首元素時(shí),應(yīng)首先通過(guò)隊(duì)頭指針和隊(duì)尾指針是否相等判斷隊(duì)列是否已空。 5.在元素出隊(duì)操作,先通過(guò)隊(duì)頭指針和隊(duì)尾指針是否相等判斷隊(duì)列是否已空,空時(shí)不能操作,這是要注意的。 6.程序滿足了本次試驗(yàn)的目的和任務(wù)要求,可以進(jìn)展人機(jī)交互,在后來(lái)的程序中將會(huì)做些改良,以增強(qiáng)人機(jī)交互性。 7.本程序存在較多不足,如有問(wèn)題,參考用戶手冊(cè)。 8.在程序語(yǔ)句中,原本使用了大量的生僻的函數(shù)名,經(jīng)過(guò)改良,目前使用都是通俗易懂的函數(shù)名稱,方便用戶理解。 鏈隊(duì)列 1.編譯并調(diào)試,運(yùn)行程序。

48、 2.設(shè)計(jì)測(cè)試用例,分析測(cè)試結(jié)果,以驗(yàn)證所完成的系統(tǒng)是否達(dá)到預(yù)期效果。 3.要注意設(shè)定一個(gè)在鏈隊(duì)列添加一個(gè)頭結(jié)點(diǎn)并令指針指向頭結(jié)點(diǎn)。同時(shí),刪除不可以在最后面進(jìn)展刪除,但是插入可以最后一個(gè)進(jìn)展插入,這點(diǎn)需要注意 4.需要分別指向隊(duì)頭和隊(duì)尾的指針。 5.程序滿足了本次試驗(yàn)的目的和任務(wù)要求,可以進(jìn)展人機(jī)交互,在后來(lái)的程序中將會(huì)做些改良,以增強(qiáng)人機(jī)交互性。 6.本程序存在較多不足,如有問(wèn)題,參考用戶手冊(cè)。 7.在程序語(yǔ)句中,原本使用了大量的生僻的函數(shù)名,經(jīng)過(guò)改良,目前使用都是通俗易懂的函數(shù)名稱,方便用戶理解。 循環(huán)隊(duì)列 1.編譯并調(diào)試,運(yùn)行程序。

49、 2.設(shè)計(jì)測(cè)試用例,分析測(cè)試結(jié)果,以驗(yàn)證所完成的系統(tǒng)是否達(dá)到預(yù)期效果。 3.為了防止順序隊(duì)列造成的“假溢出〞現(xiàn)象,我們通常采用順序循環(huán)隊(duì)列實(shí)現(xiàn)隊(duì)列的順序存儲(chǔ)。 4.隊(duì)頭指針和對(duì)尾指針與隊(duì)列元素之間關(guān)系和順序隊(duì)列一樣,不變。 5.先判斷隊(duì)列是否為空。就是看隊(duì)頭指針和隊(duì)尾指針是否同時(shí)指向隊(duì)列中的同一個(gè)位置,即隊(duì)頭指針和隊(duì)尾指針是否相等,空時(shí)不能操作,這是要注意的。 6.在將元素插入到隊(duì)列之前首先要判斷隊(duì)列是否已經(jīng)已滿,根據(jù)順序循環(huán)隊(duì)列隊(duì)滿條件front==(rear+1)%MAXQSIZE來(lái)判斷隊(duì)列是否已滿。在刪除隊(duì)首元素時(shí),應(yīng)首先通過(guò)隊(duì)頭指針和隊(duì)尾指針是否相等判斷隊(duì)列是否已空。

50、 6.程序滿足了本次試驗(yàn)的目的和任務(wù)要求,可以進(jìn)展人機(jī)交互,在后來(lái)的程序中將會(huì)做些改良,以增強(qiáng)人機(jī)交互性。 7.本程序存在較多不足,如有問(wèn)題,參考用戶手冊(cè)。 8.在程序語(yǔ)句中,原本使用了大量的生僻的函數(shù)名,經(jīng)過(guò)改良,目前使用都是通俗易懂的函數(shù)名稱,方便用戶理解。 五、用戶手冊(cè)(xx) (1) 本程序的運(yùn)行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件名為:j.exe. (2) 進(jìn)入演示程序后即顯示文本方式的用戶界面,輸入元素1,2,3,4,5創(chuàng)建隊(duì)列。 (3) 根據(jù)提示,選擇操作2執(zhí)行元素入隊(duì)操作?;剀嚕? 輸入入隊(duì)元素0,回車,將0插入到隊(duì)列中。

51、 〔4〕選擇操作3執(zhí)行元素出隊(duì)操作,回車,隊(duì)首元素1出隊(duì)。 〔5〕選擇操作1執(zhí)行輸出隊(duì)列長(zhǎng)度操作,回車, 輸出隊(duì)列長(zhǎng)度為5. 〔6〕選擇操作5執(zhí)行清空隊(duì)列操作,回車,清空。 (7) 選擇操作6執(zhí)行輸出隊(duì)頭元素操作,回車,輸出元素2。 2. 順序隊(duì)列 〔1〕創(chuàng)建隊(duì)列,輸入數(shù)據(jù) 1,2,3,4,5. (2) 〔3〕選擇操作2,執(zhí)行出隊(duì)操作。 隊(duì)首元素1出隊(duì). 〔4〕選擇操作3,判斷對(duì)是否為空 (5) 選擇操作4,輸出對(duì)頭元素2. (6

52、) 選擇操作5,顯示隊(duì)列元素 3、循環(huán)隊(duì)列 〔1〕創(chuàng)建隊(duì)列,輸入數(shù)據(jù) 1,2,3,4,5. 〔2〕 〔3〕選擇操作2,執(zhí)行出隊(duì)操作。隊(duì)首元素1出隊(duì). (3) 選擇操作3,判斷對(duì)是否為空 (5) 選擇操作4,輸出對(duì)頭元素2. (6) 選擇操作5,顯示隊(duì)列元素為,2,3,4,5,0 六.測(cè)試結(jié)果〔xxx〕 1. 順序隊(duì)列的實(shí)現(xiàn)和運(yùn)算 1〕輸入1即可進(jìn)展進(jìn)入到順序隊(duì)列 2〕順序隊(duì)列的建立,輸入元素的個(gè)數(shù)為5,輸入的數(shù)據(jù)分別為1 ,2 , 3 ,4 ,5 ,對(duì)頭為1,隊(duì)尾

53、為5,此時(shí)隊(duì)列的數(shù)據(jù)為1 2 3 4 5 3〕輸入2即可進(jìn)展入隊(duì)運(yùn)算,輸入的入隊(duì)元素為0,此時(shí)的隊(duì)列的數(shù)據(jù)為1 2 3 4 5 0 4〕輸入3即可進(jìn)展判斷隊(duì)列的是否為空,如如下圖: 5〕輸入4即可進(jìn)展去的對(duì)頭元素的算法,如如下圖所示: 6〕此時(shí)的隊(duì)列的數(shù)據(jù)為2 3 4 5 0,如如下圖: 7〕輸入0即可退出順序隊(duì)列,如如下圖: 8〕輸入3即可進(jìn)展順序隊(duì)列的算法,如如下圖所示: 9〕輸入1即可進(jìn)展相應(yīng)的入隊(duì)運(yùn)算,如如下圖所示: 10〕輸入2即可進(jìn)展隊(duì)列的出隊(duì)運(yùn)算,如如下圖所示: 11〕輸入3即可判斷順序隊(duì)列

54、是否為空的算法,如如下圖所示: 12〕輸入4即可進(jìn)展去的頭結(jié)點(diǎn)的運(yùn)算,如如下圖所示: 13〕輸入5即可進(jìn)展隊(duì)列的輸出顯示的運(yùn)算,如如下圖所示: 14〕輸入0即可進(jìn)展退出順序隊(duì)列的算法,如如下圖所示: 2. 鏈?zhǔn)疥?duì)列的實(shí)現(xiàn)和運(yùn)算 1〕隊(duì)列的建立以與隊(duì)列的個(gè)數(shù)輸入為5,輸入的數(shù)據(jù)分別為1 ,2 ,3 ,4 ,5.如如下圖: 2〕輸入2即可進(jìn)入到元素的入隊(duì)運(yùn)算,輸入入隊(duì)的元素的為0,輸入3即可進(jìn)展相應(yīng)的元素的出隊(duì)運(yùn)算,出隊(duì)元素為1.如如下圖: 3〕如此此時(shí)的隊(duì)列的長(zhǎng)度為5,輸入4即可進(jìn)展隊(duì)列的銷毀以與輸入5即可進(jìn)展隊(duì)列的清空運(yùn)算,如如下圖: 4〕輸入6即可進(jìn)展輸出

55、隊(duì)列的對(duì)頭元素,輸入0即可進(jìn)展退出鏈隊(duì)列的運(yùn)算 3.循環(huán)隊(duì)列的實(shí)現(xiàn)和運(yùn)算 1〕輸入3即可進(jìn)展循環(huán)隊(duì)列的操作,輸入5個(gè)數(shù)據(jù),它們分別為1 2 3 4 5,輸入1,即可進(jìn)展入隊(duì)操作,輸入入隊(duì)的元素為0,如此此時(shí)的數(shù)據(jù)為1 2 3 4 5 0,如如下圖所示: 2〕輸入2即可進(jìn)展出隊(duì)運(yùn)算,如如下圖所示: 3〕輸入3即可進(jìn)展判斷隊(duì)列的是否為空,如如下圖所示: 4〕輸入4即可進(jìn)展取得對(duì)頭元素,如如下圖所示: 5)輸入5即可進(jìn)展輸出所有的數(shù)據(jù)顯示,如如下圖所示: 七.心得體會(huì)〔xx〕 隊(duì)列是一種特殊的線性表,特殊之處在于它只允許在表的前端〔front〕進(jìn)展刪

56、除操作,而在表的后端〔rear〕進(jìn)展插入操作,和棧一樣,隊(duì)列是一種操作受限制的線性表。進(jìn)展插入操作的端稱為隊(duì)尾,進(jìn)展刪除操作的端稱為隊(duì)頭。隊(duì)列中沒(méi)有元素時(shí),稱為空隊(duì)列。 在隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)中,最先插入的元素將是最先被刪除的元素;反之最后插入的元素將是最后被刪除的元素,因此隊(duì)列又稱為“先進(jìn)先出〞 的線性表。注意的是為了防止順序隊(duì)列造成的“假溢出〞現(xiàn)象,我們通常采用順序循環(huán)隊(duì)列實(shí)現(xiàn)隊(duì)列的順序存儲(chǔ)。還有要注意的是在C語(yǔ)言中不能用動(dòng)態(tài)分配的一維數(shù)組來(lái)實(shí)現(xiàn)循環(huán)隊(duì)列,如果用戶的應(yīng)用程序中設(shè)有循環(huán)隊(duì)列,如此必須為它設(shè)定一個(gè)最大隊(duì)列長(zhǎng)度;假如用戶無(wú)法估計(jì)所用隊(duì)列的最大長(zhǎng)度,如此宜采用鏈?zhǔn)疥?duì)列。 58 / 58

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!