




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
黑龍江工程學院信息科學與技術學院程序設計基礎課程設計報告題目名稱:數據排序學生姓名:學號:專業班級:計科2班指導教師:目錄1.課程設計題目與要求: 31.1設計題目: 31.2設計要求: 32總體設計 33詳細設計: 33.1數據結構設計 33.2主模塊設計 33.2.1輸入數據: 33.2.2字符串大小排序 33.2.3整型數值大小排列: 34運行結果 35、遇到問題及解決方案 36、小結 37、參考資料 3………171.課程設計題目與要求:1.1設計題目:編一通用排序程序,程序可以對任意類型的數值常數或字符串構成的行進行排序,通過人機對話選擇程序是按數值進行排序還是按字符順序進行排序。排序是針對數據文件的。例如:初始數據為:12,24,9,128,3,76,345按數值大小排序應為:3,9,12,24,76,128,345按字符串大小排序應為:12,128,24,3,345,76,91.2設計要求:(1)只能使用C/C++語言,源程序要有適當的注釋,使程序容易閱讀(2)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(3)學生可自動增加新功能模塊(4)完成系統總結報告以及系統使用說明書\\2總體設計功能框架圖:主函數輸入數值1,2,3輸入數據插入排序函數輸出退出函數
3詳細設計:主函數輸入數值1,2,3輸入數據插入排序函數輸出退出函數3.1數據結構設計開始 開始判斷類型排序輸出輸入數據輸入123判斷是否繼續判斷類型排序輸出輸入數據輸入123判斷是否繼續 01結束結束3.2主模塊設計3.2.1輸入數據:開始開始輸入數據輸入數據判斷 是判斷 否結束結束開始3.2.2字符串大小排序開始傳入字符數據strcmp(a[i],a[i+1])>0Str1=a[i];a[i]=a[i+1];a[i+1]=str1=1]輸出字符串判斷i++傳入字符數據strcmp(a[i],a[i+1])>0Str1=a[i];a[i]=a[i+1];a[i+1]=str1=1]輸出字符串判斷i++3.2.3整型數值大小排列:開始傳入整型數據開始傳入整型數據a[i]>a[i+1] a[i]>a[i+1]k=a[i];a[i]=a[i+1];a[i+1]=k=1]判斷i++k=a[i];a[i]=a[i+1];a[i+1]=k=1]判斷i++ 是輸出字符串 否輸出字符串4運行結果5、遇到問題及解決方案本程序是運用類編寫但與平時作業不同的是難度較大,涉及內容較廣。特別是要用到動態鏈表和對文件進行操作。而鏈表老師只是平時在課堂上簡單介紹,對文件的操作老師又沒講。所以就只有靠我們自學,在編程期間我自己去圖書館查閱相應的資料,逐漸掌握了動態鏈表。通過看教材第13章《輸入輸出流》以及向學院里的編程高手請教,學會了對文件進行操作。6、小結通過本次的C++課程設計,讓我學會了把書本上的知識應用到了實際中來。雖然在這幾周中有過挫折和坎坷,有的問題一直到了最后才被解決,但是我認為這未必就不是好事,這樣能鍛煉我的意志,磨練我的耐心,失敗是成功之母,這話一點都沒錯,沒有失敗就沒有成功。讓我沒有失去信心的是關懷我們的老師,當我們有了問題和疑問,老師就很耐心的給予講解,讓我們有了一個良好的學習氛圍。7、參考資料《C++程序設計》譚浩強清華大學出版社《VISUALC++6.0完全自學手冊》孔鵬人民郵電出版社8.源代碼#include<iostream>#include<string>#include<Windows.h>usingnamespacestd;template<typenameT>//輸出voidOut(T*array,constinta){ inti=0; for(;i<a;++i) cout<<array[i]<<""; cout<<endl;}template<typenameT>//排序voidfluent(T*array,constintn){ inti,j; Ta; for(i=0;i<n-1;++i) { for(j=0;j<n-i-1;++j) { if(array[j]>array[j+1]) { a=array[j]; array[j]=array[j+1]; array[j+1]=a; } } }}template<typenameT>//輸入數據并存放到數組中voidIn(T*array,intn){ inti=0; cout<<"請輸入值,用空格隔開:"<<endl; for(;i<n;i++) { cin>>array[i]; }}intmain(){ intk,n,a[10],x; doubleb[10]; stringc[10];for(x=0;x<1;){cout<<"*******************************************************************************"<<endl; cout<<"1.按整型數值排序"<<endl; cout<<"2.按浮點型數值排序"<<endl;cout<<"3.按字符串排序"<<endl; cin>>k; if(k==1) {cout<<"請輸入數據個數:"<<endl; cin>>n; In(a,n);//調用函數cout<<"*******************************************************************************"<<endl; fluent(a,n); cout<<endl<<"整型數值排序:"<<endl; Out(a,n); } if(k==2) {cout<<"請輸入數據個數:"<<endl; cin>>n; In(b,n);//調用函數cout<<"*******************************************************************************"<<endl; fluent(b,n); cout<<endl<<"浮點型數值排序:"<<endl; Out(b,n); } if(k==3) {cout<<"請輸入數據個數:"<<endl; cin>>n; In(c,n);//調用函數 cout<<"*******************************************************************************"<<endl; fluent(c,n); cout<<endl<<"按字符串排序:"<<endl; Out(c,n); } cout<<"繼續請輸入0不繼續請輸入1"<<endl;//選擇是否繼續; cin>>x;} return0;}數據結構課程設計題目:二叉樹的操作學生姓名:學號:系部名稱:計算機科學與技術系專業班級:指導教師:
SY-027課程設計任務書SY-027組內學生姓名人數1系部名稱計算機科學與技術系專業軟件工程班級、學號指導教師姓名職稱從事專業軟件工程題目名稱二叉樹的操作課程設計的目的、意義目的在于通過課程設計的綜合訓練,幫助學生深入系統地掌握數據結構課程的主要內容和基本方法,培養學生綜合運用所學知識分析解決實際問題和編程等實際動手能力。熟練的掌握二叉樹的基本操作。二、課程設計的主要內容、技術要求(包括原始數據、技術參數、設計要求、工作量要求等)實現二叉樹的先序、中序和后序遍歷;求二叉樹的結點總數、葉子結點個數及二叉樹的深度。三、課程設計完成后應提交的成果完整的論文和部分源代碼四、課程設計的工作進度安排(1)復習與設計題目相關的數據結構知識,查閱文獻資料(1天)(2)確定設計方案,設計模塊結構及各模塊流程(1天)(3)編碼、調試與測試(5天)(4)撰寫課程設計報告(2天)(5)設計演示(1天)五、主要參考資料1.嚴蔚敏、吳偉民,《數據結構》(C語言版),北京:清華大學出版社,2006.52.寧正元、易金聰,《數據結構習題解析與上機實驗指導》,中國水利水電出版社、上海交通大學出版社、東南大學出版社,2002.6六、備注指導教師簽字:年月日教研室主任簽字:年月日程序要求1)完成二叉樹的基本操作。2)建立以二叉鏈表為存儲結構的二叉樹;3)實現二叉樹的先序、中序和后序遍歷;4)求二叉樹的結點總數、葉子結點個數及二叉樹的深度。算法分析建立以二叉鏈表為存儲結構的二叉樹,在次二叉樹上進行操作;1先序遍歷二叉樹的操作定義為:若二叉樹唯恐則為空操作;否則(1)訪問根節點;(2)先序遍歷做字數和;(3)先序遍歷有子樹;2中序遍歷二叉樹的操作定義為:若二叉樹為空,則空操作;否則(1)中序遍歷做子樹;(2)訪問根節點;(3)中序遍歷有子樹;3后續遍歷二叉樹的操作定義為:若二叉樹為空則為空操作;否則(1)后序遍歷左子樹;(2)后序遍歷右子樹;(3)訪問根節點;二叉樹的結點總數、葉子結點個數及二叉樹的深度。二叉樹的基本操作和算法實現二叉樹是一種重要的非線性數據結構,是另一種樹形結構,它的特點是每個節點之多有兩棵子樹(即二叉樹中不存在度大于2的結點),并且二叉樹的結點有左右之分,其次序不能隨便顛倒。二叉樹創建二叉樹的很多操作都是基于遍歷實現的。二叉樹的遍歷是采用某種策略使得采用樹形結構組織的若干年借點對應于一個線性序列。二叉樹的遍歷策略有四種:先序遍歷中續遍歷后續遍歷和層次遍歷。基本要求1從鍵盤接受輸入數據(先序),以二叉鏈表作為存儲結構,建立二叉樹。2輸出二叉樹。3對二叉樹進行遍歷(先序,中序,后序和層次遍歷)4將二叉樹的遍歷打印出來。一.問題描述二叉樹的很多操作都是基于遍歷實現的。二叉樹的遍歷是采用某種策略使得采用樹型結構組織的若干結點對應于一個線性序列。二叉樹的遍歷策略有四種:先序遍歷、中序遍歷、后序遍歷和層次遍歷。二.基本要求1.從鍵盤接受輸入數據(先序),以二叉鏈表作為存儲結構,建立二叉樹。2.輸出二叉樹。3.對二叉樹進行遍歷(先序、中序、后序和層次遍歷)。4.將二叉樹的遍歷結果打印輸出。三.提示與分析1.主要數據類型①二叉鏈表#defineDataTypechar/*元素類型*/typedefstructBiTNode{DataTypedata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;②二叉樹的遍歷序列DataTypepreorder[n];DataTypeinorder[n];DataTypepostorder[n];2.基本功能分析①采用教材上類似于先序遍歷的方法逐個輸入結點,建立二叉鏈表存儲的二叉樹。②采用遞歸算法對二叉樹分別進行先序、中序、后序遍歷。③以隊列為輔助結構實現二叉樹的層次遍歷。④結合先序遍歷,以凹入表形式輸出二叉樹。//定義二叉樹結點結構和操作的頭文件btree1.h//定義二叉樹結點值的類型為字符型typedefcharElemType;//定義二叉樹結點類型structBTreeNode{ElemTypedata;BTreeNode*left;BTreeNode*right;};//初始化二叉樹,即把樹根指針置空voidInitBTree(BTreeNode*&BT);//判斷二叉樹是否為空boolBTreeEmpty(BTreeNode*BT);1.1.1二叉樹的遍歷二叉樹的遍歷即是如何按照某條路徑尋訪每一個結點,使得每個結點均被訪問一次,而且僅被訪問一次。“訪問”的含義很廣,可以是對結點做出各種處理,如輸出結點的信息等。遍歷對線性結構來說是一個容易解決的問題,而對于二叉樹則不然,由于二叉樹是一種非線性結構,每個結點都有可能有倆棵子樹,因而需要尋找一種規律,以便使二叉樹上的結點都能夠排列在線性隊列上,從而便于遍歷。二叉樹室友三個基本單位組成的:根節點左子樹和右子樹。因而遍歷著三個部分,便是遍歷了整個二叉樹。voidTraverseBTree(BTreeNode*BT,intmark){if(mark==1){//先序遍歷if(BT!=NULL){cout<<BT->data<<'';TraverseBTree(BT->left,mark);TraverseBTree(BT->right,mark);}}elseif(mark==2){//中序遍歷if(BT!=NULL){TraverseBTree(BT->left,mark);cout<<BT->data<<'';TraverseBTree(BT->right,mark);}}elseif(mark==3){//后序遍歷if(BT!=NULL){TraverseBTree(BT->left,mark);TraverseBTree(BT->right,mark);cout<<BT->data<<'';}}elseif(mark==4)//按層遍歷{constMaxLength=30;BTreeNode*Q[MaxLength];//定義存儲二叉樹結點指針的數組空間作為隊列使用intfront=0,rear=0;//定義隊首指針和隊尾指針,初始均置0表示空隊BTreeNode*p;}求二叉樹的結點總數葉子節點個數及二叉樹的深度//用于求二叉樹深度的遞歸函數intDepth(BTreeNode*BT){if(BT==NULL)return0;//對于空樹,返回0并結束遞歸else{//計算左子樹的深度intdep1=Depth(BT->left);//計算右子樹的深度intdep2=Depth(BT->right);//返回樹的深度if(dep1>dep2)returndep1+1;elsereturndep2+1;}}//求二叉樹中所有結點數intBinaryTree::BTreeCount(){returnCount(root);}//用于求二叉樹中所有結點數的遞歸函數intCount(BTreeNode*BT){if(BT==NULL)return0;elsereturnCount(BT->left)+Count(BT->right)+1;}//求二叉樹中所有葉子結點數intBinaryTree::BTreeLeafCount(){returnLeafCount(root);}//用于求二叉樹中所有葉子結點數的遞歸函數intLeafCount(BTreeNode*BT){if(BT==NULL)return0;elseif(BT->left==NULL&&BT->right==NULL)return1;elsereturnLeafCount(BT->left)+LeafCount(BT->right);}調試結果測試數據1.輸入:ABC+DE+G++F+++(其中+表示空格字符)則輸出結果為:先序:ABCDEGF中序:CBEGDFA后序:CGEFDBA2.輸入:AB+DG+++CE++F++先序:ABDGCEF中序:BGDAECF后序:GDBEFCA3.輸入:ABDF++++C+E+G++先序:ABDFCEG中序:FDBACEG后序:FDBGECA第五章實習體會數據結構的實習是培養學生綜合運用所學知識,發現,提出,分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際工作能力的具體訓練和考察過程.回顧起此數據結構實習,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在整整兩星期的日子里,可以說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次實習使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商洛職業技術學院《航線設計》2023-2024學年第二學期期末試卷
- 南溪縣2024-2025學年四年級數學第二學期期末監測試題含解析
- 清遠職業技術學院《圖文信息處理與再現》2023-2024學年第二學期期末試卷
- 浙江交通職業技術學院《藥劑學實驗仿真》2023-2024學年第二學期期末試卷
- 山東農業工程學院《生物技術制藥雙語》2023-2024學年第二學期期末試卷
- 山東省濰坊市臨朐縣2024-2025學年高考全真模擬考卷物理試題含解析
- 四川省巴中學市恩陽區實驗中學2025屆初三第二次校模擬考試英語試題含答案
- 吉林省吉林市吉化九中學2025屆初三下學期暑假聯考化學試題含解析
- 江蘇省徐州市邳州市運河中學2025屆初三下學期期末教學質量檢測試題(一模)數學試題含解析
- 長春工業大學《放射生物學》2023-2024學年第二學期期末試卷
- 2025年山東省東營市廣饒縣一中中考一模英語試題(原卷版+解析版)
- 工貿行業隱患排查指導手冊
- 形勢與政策(貴州財經大學)知到智慧樹章節答案
- GB/T 36187-2024冷凍魚糜
- 2023年江蘇省五年制專轉本英語統考真題(試卷+答案)
- 20S805-1 雨水調蓄設施-鋼筋混凝土雨水調蓄池
- GB3469-83《文獻類型與文獻載體代碼》
- 互聯網大學生創新創業大賽培訓
- 3號鋼筋加工場桁吊安裝方案
- 部編版(統編)六年級語文下冊文學常識及文化常識(共4頁)
- 世界500強企業企業文化(企業使命、愿景、核心價值觀)集錦
評論
0/150
提交評論