課程設計 隊列問題_第1頁
課程設計 隊列問題_第2頁
課程設計 隊列問題_第3頁
課程設計 隊列問題_第4頁
課程設計 隊列問題_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課 程 設 計 報 告題 目: 隊列問題 院 系: 計算機科學與應用系 專業年級: 計算機科學與技術 學 號: 學生姓名: 指導老師: 2013年6月29日1、 需求分析1.1功能需求鏈隊列基本操作的實現:鏈隊列的初始化,生成一個空鏈隊列;鏈隊列的撤消,即刪除隊列中的所有結點,僅留下指針結點;鏈隊列的入隊操作,即在已知隊列的隊尾插入一個元素e,即修改隊尾指針;鏈隊列的出隊操作,即返回隊首結點的元素值并刪除隊首結點;返回元素的第一個值; 設計一個菜單,具有上述要求的所有功能、退出系統等最基本的功能。1.2輸入的形式和輸入值的范圍、 輸出的形式程序輸入:根據主界面提示,輸入所選的操作,并根據提示按

2、“2”鍵輸入元素。若為非法輸入,系統會做出提示。程序輸出:輸入想要操作的選項,便能輸出與之對應的結果,接著輸入下次操作選項,按“0”退出主頁面。1.3設計內容 1.建立一個空鏈隊列;2.插入一個元素;3.刪除元素;4.返回元素的第一個值;5.消除隊列;1.4運行環境(1)WINDOWS7/XP系統(2)visual C+6.0編譯環境2、概要設計2.1該系統的功能簡介實現鏈隊列的初始化,生成一個空鏈隊列;鏈隊列的撤消,即刪除隊列中的所有結點,僅留下指針結點。鏈隊列的入隊操作,即在已知隊列的隊尾插入一個元素e,即修改隊尾指針。鏈隊列的出隊操作,即返回隊首結點的元素值并刪除隊首結點;設計一個菜單,

3、具有上述要求的所有功能、退出系統等最基本的功能。2.2 總體程序框圖進入程序構建隊列插 入 元 素刪除元素消除隊列退出程序返回元素3、 詳細設計3.1 構造空隊列Status Initqueue(Linkqueue &Q) Q.front = Q.rear = (Queueptr) malloc (sizeof(Qnode); if(!Q.front) return (OVERFLOW);/存儲分配失敗 Q.front ->next = NULL; return OK;/構造一個空隊列3.2 消除隊列 Status Destroyqueue(Linkqueue &Q) w

4、hile(Q.front) Q.rear = Q.front ->next; free(Q.front); Q.front = Q.rear; return OK;/銷毀隊列3.3 插入新元素Status Enqueue(Linkqueue &Q,Qelemtype e)/插入元素e,為Q新的隊尾元素 Queueptr p; p = (Queueptr) malloc (sizeof(Qnode); if(!p) return(OVERFLOW); p->data = e; p->next = NULL; Q.rear->next = p; Q.rear = p

5、; return OK;/插入新元素3.4 刪除隊頭元素Status Dequeue(Linkqueue &Q,Qelemtype &e) Queueptr p;/若隊列不空,則刪除Q的對頭元素,用e返回其值,并返回OK/否則返回ERROR if(Q.front = Q.rear) return ERROR; p = Q.front->next; e = p->data; Q.front->next = p->next; if(Q.rear = p) Q.rear = Q.front; free(p); return OK;/刪除隊頭元素3.5返回隊頭元

6、素Status getfirst(Linkqueue &Q) if(Q.front=Q.rear) return ERROR; else return Q.front->next->data; /返回隊列的第一個元素3.6主函數main() Linkqueue Q; Qelemtype e,n,i; char select; do printf("請輸入您的選擇:nn"); printf("1.構造一個空隊列n"); printf("2.向隊列中插入元素n"); printf("3.刪除隊列中的元素n&q

7、uot;); printf("4.銷毀隊列n"); printf("5.返回隊列的第一個元素n"); printf("0.退出程序n"); printf("您的選擇是:"); select = getchar(); switch(select) case '1': if(Initqueue(Q) printf("構造成功n"); else printf("構造失敗n"); break; case '2': printf("你想插入多少

8、個元素:"); scanf("%d",&n); for(i=1;i<=n;i+) scanf("%d",&e); if(Enqueue(Q,e) != OK) return ERROR; break; case '3': if(Dequeue(Q,e) printf("你刪除的對頭元素是: %dn",e); else printf("刪除失敗n"); break; case '4': if(Destroyqueue(Q) printf("銷毀

9、隊列成功n"); else printf("銷毀失敗n"); break; case'5': int a; printf("隊列的第一個元素是:n"); a=getfirst(Q);printf("%d",a); break; default: printf("您的輸入不服規范,請重新輸入!"); getchar(); printf("nn"); while(select!='0');3.7函數的調用關系圖開始Main函數InitqueueEnqueue

10、Destroyqueue函數Getfirst函數結束 函數的關系調用圖4、調試分析4.1、問題的解決 在調試過程中,出現錯誤,根據visual C+6.0的檢錯找到錯誤所在,然后錯誤行附近尋找錯誤所在,進而改正錯誤;遇到找不到和不能改正的錯誤,就向老師,同學,網絡尋求幫助。4.2、經驗和體會 必須牢固掌握基礎知識。由于C語言是大一所學知識,有所遺忘,且未掌握好這學期所學的數據結構這門課,所以在實習之初感到棘手。不知如何下手,但在后來的實習過程中自己通過看書和課外資料,并請教其他同學,慢慢地對C語言和數據結構知識有所熟悉。這時才逐漸有了思路。所以,這次實習之后,我告誡自己:今后一定要牢固掌握好專

11、業基礎知識。必須培養嚴謹的科學態度。自己在編程時經常因為一些類似于“少了分號”的小錯誤而導致錯誤,不夠認真細致,這給自己帶來了許多麻煩。編程是一件十分嚴謹的事情,容不得馬虎。所以在今后自己一定要培養嚴謹的科學態度。我想這不僅是對于程序設計,做任何事都應如此。這次課程設計也讓我充分認識到數據結構這門課的重要性。它給我們一個思想和大綱,讓我們在編程時容易找到思路,不至于無章可循。同時它也有廣泛的實際應用。 在課程設計時遇到了很多的問題,在老師的幫助,和對各種資料的查閱中,將問題解決,培養了我自主動手,獨立研究的能力,為今后在學習工作中能更好的發展打下了堅實的基礎。 兩周的課程設計很短暫,但其間的內

12、容是很充實的,在其中我學習到了很多平時書本中無法學到的東西,積累了經驗,鍛煉了自己分析問題,解決問題的能力,并學會了如何將所學的各課知識融會,組織,來配合學習,兩周中我收益很大,學到很多。5、用戶使用說明在VC環境下編譯連接后,根據主頁面的提示輸入選擇,第一步,先輸入“1”構造一個空隊列,接著向空對列中插入元素,此時選“5”返回第一個元素,如果此時選“3”,刪除隊頭元素,再返回首元素時,返回刪除后的下一個元素。6、測試結果6.1主界面6.2建立隊列6.3插入元素6.4返回隊頭元素6.5刪除元素6.5銷毀隊列7、附錄#include "stdio.h"#include &qu

13、ot;stdlib.h"#include "stdio.h"#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2 typedef int Qelemtype;typedef int Status;typedef struct Qnode Qelemtype data; struct Qnode *next;Qnode, *Queueptr;typedef struct Queueptr front; Queueptr rear

14、;Linkqueue;Status Initqueue(Linkqueue &Q);Status Destroyqueue(Linkqueue &Q);Status Enqueue(Linkqueue &Q,Qelemtype e);Status Dequeue(Linkqueue &Q,Qelemtype &e); Status getfirst(Linkqueue &Q);Status Initqueue(Linkqueue &Q) Q.front = Q.rear = (Queueptr) malloc (sizeof(Qnode)

15、; if(!Q.front) return (OVERFLOW); Q.front ->next = NULL; return OK;/構造一個空隊列Status Destroyqueue(Linkqueue &Q) while(Q.front) Q.rear = Q.front ->next; free(Q.front); Q.front = Q.rear; return OK;/銷毀隊列Status Enqueue(Linkqueue &Q,Qelemtype e) Queueptr p; p = (Queueptr) malloc (sizeof(Qnode)

16、; if(!p) return(OVERFLOW); p->data = e; p->next = NULL; Q.rear->next = p; Q.rear = p; return OK;/插入新元素Status Dequeue(Linkqueue &Q,Qelemtype &e) Queueptr p; if(Q.front = Q.rear) return ERROR; p = Q.front->next; e = p->data; Q.front->next = p->next; if(Q.rear = p) Q.rear =

17、 Q.front; free(p); return OK;/刪除隊頭元素 Status getfirst(Linkqueue &Q) if(Q.front=Q.rear) return ERROR; else return Q.front->next->data; /返回隊列的第一個元素#include "stdio.h"main() Linkqueue Q; Qelemtype e,n,i; char select; do printf("請輸入您的選擇:nn"); printf("1.構造一個空隊列n"); p

18、rintf("2.向隊列中插入元素n"); printf("3.刪除隊列中的元素n"); printf("4.銷毀隊列n"); printf("5.返回隊列的第一個元素n"); printf("0.退出程序n"); printf("您的選擇是:"); select = getchar(); switch(select) case '1': if(Initqueue(Q) printf("構造成功n"); else printf("

19、構造失敗n"); break; case '2': printf("你想插入多少個元素:"); scanf("%d",&n); for(i=1;i<=n;i+) scanf("%d",&e); if(Enqueue(Q,e) != OK) return ERROR; break; case '3': if(Dequeue(Q,e) printf("你刪除的對頭元素是: %dn",e); else printf("刪除失敗n"); b

20、reak; case '4': if(Destroyqueue(Q) printf("銷毀隊列成功n"); else printf("銷毀失敗n"); break; case'5': int a; printf("隊列的第一個元素是:n"); a=getfirst(Q);printf("%d",a); break; default: printf("您的輸入不服規范,請重新輸入!"); getchar(); printf("nn"); while(select!='0');參考文獻1趙國玲. C語言與數據結構M. 北京:電子工業出版社,2嚴蔚敏,吳偉民. 數據結構(C語言版)M. 北京:清華大學出版社,3 嚴蔚敏.數據結構 C語言M.北京: 清華大學出版社,4 譚浩強. C程序設

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論