![數據結構試驗——分類二叉樹和堆排序_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/30/fac45bca-a3a1-4d05-b900-d169009fb801/fac45bca-a3a1-4d05-b900-d169009fb8011.gif)
![數據結構試驗——分類二叉樹和堆排序_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/30/fac45bca-a3a1-4d05-b900-d169009fb801/fac45bca-a3a1-4d05-b900-d169009fb8012.gif)
![數據結構試驗——分類二叉樹和堆排序_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/30/fac45bca-a3a1-4d05-b900-d169009fb801/fac45bca-a3a1-4d05-b900-d169009fb8013.gif)
![數據結構試驗——分類二叉樹和堆排序_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/30/fac45bca-a3a1-4d05-b900-d169009fb801/fac45bca-a3a1-4d05-b900-d169009fb8014.gif)
![數據結構試驗——分類二叉樹和堆排序_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/30/fac45bca-a3a1-4d05-b900-d169009fb801/fac45bca-a3a1-4d05-b900-d169009fb8015.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數據結構實驗3»實驗報告分類二叉樹及堆排序構建1、預習要求:分類二叉樹結構定義。2、實驗目的:(1)了解分類二叉樹結構概念、查找算法程序。(2)掌握堆排序算法程序。3、實驗內容及要求:(1)建立包含10個結點的分類二叉樹(樹結構和數據元素的值由自己設定)(2)完成分類二叉樹中序遍歷程序;(3)給出程序和遍歷程序的結果。附源程序#include<stdlib.h>#include<stdio.h>#defineMaxSize10typedefstructintNum;floatscore1;floatscore2;floatscore3;Student;儲存學生
2、信息,依次為學號,語文成績,數學成績,英語成績typedefstructfloattotal;/學生總分Student*p;HeapNode;/typedefstructBinaryTreeNode(HeapNodedata;BinaryTreeNode*LChild;BinaryTreeNode*RChild;BinaryTreeNode;/分類二叉樹的結點intHeapSize=9;voidDisplayarray(HeapNodea)/輸出堆排序的結果(inti;for(i=1;i<10;i+)printf("學號d總分fn",ai.p->Num,ai.t
3、otal);printf("n");voidMenu_name()/作存信息(printf("nnnnnnn");printf("*n");printf("堆排序和分類二叉樹的查找nn");printf("制作:n學號0909050108n");printf("班級:n");printf("指導老師:n");printf("*5);printf("nnntt");voidMaxHeapInit(HeapNodea,intsiz
4、e)/對數組a中的數據初始化為一個最大堆HeapNode*heap=a;/數組a用Heap指向HeapSize=size;/數組中數據元素個數存放到HeapSizefor(inti=HeapSize/2;i>=1;i-)從最后一個結點的根開始,直到第一個結點heap0=heapi;/將子樹根結點值復制到工作空間heap0中intson=2*i;/son的雙親結點是heap0的目標位置,/son首先指向i的左孩子while(son<=HeapSize)/找左右孩子中較大結點if(son<HeapSize&&heapson.total<heapson+1.t
5、otal)son+;/son<HeapSize時,存在右孩子,如左孩子小于右孩子,son指向右孩子if(heap0.total>=heapson.total)/大孩子再與工作空間中結點值再比較break;/工作空間中值大,找到heap0的目標位置heapson=heapson;/將大孩子上移至雙親位置son*=2;/son下移一層到上移的結點(大孩子)位置heapson=heap0;/heap0存放到目標位置/最大堆中刪除頂結點,并放入x中返回算法boolMaxHeapDelete(HeapNodea,HeapNode&x)HeapNode*heap=a;if(HeapSi
6、ze=0)returnfalse;/堆空x=heap1;最大結點存放到xheap0=heapHeapSize-;/最后一個結點存放到heap0,調整堆中元素的個數inti=1,son=2*i;while(son<=HeapSize)if(son<HeapSize&&heapson.total<heapson+1.total)son+;if(heap0.total>=heapson.total)break;heapi=heapson;/孩子上移i=son;/下移根結點指針,繼續(xù)比較son=son*2;heapi=heap0;returntrue;voidH
7、eapSort(HeapNodea,intn)/利用堆對a1:n數組中的數據排序HeapNode*heap=a;MaxHeapInit(heap,n);/Heap初始化為最大堆HeapNodex;intm=1;for(inti=n-1;i>=1;i-)MaxHeapDelete(heap,x);printf("第堆排序結果n",m);m+;Displayarray(a);system("pause");system("cls");heapi+1=x;)BinaryTreeNode*SortBinaryTreeInsert(Bin
8、aryTreeNode*&BT,HeapNode&x)/求如果不重復出現,則插入結點xBinaryTreeNode*p;BinaryTreeNode*parent=NULL;指向p的雙親p=BT;while(p)parent=p;if(x.total<p->data.total)p=p->LChild;elseif(x.total>p->data.total)p=p->RChild;elsereturnp;重復出現,即相等值結點出現)/找到插入點,為x申請一個空間填入其值,并將該結點連接至parentBinaryTreeNode*q=newB
9、inaryTreeNode;q->data=x;q->LChild=NULL;q->RChild=NULL;if(BT)/原樹非空if(x.total<parent->data.total)parent->LChild=q;elseparent->RChild=q;else/插入到空樹中BT=q;returnBT;intSortBinaryTreeSearch(BinaryTreeNode*BT,HeapNode&x,float&SearchKey)/求查找關鍵字為SearchKey的結點值xBinaryTreeNode*p=BT;wh
10、ile(p)if(SearchKey<p->data.total)p=p->LChild;elseif(SearchKey>p->data.total)p=p->RChild;elsex=p->data;return1;return0;voidmain()HeapNodea10;Studentstudent10;HeapNodex;floatkey;Student*p;BinaryTreeNode*BT;intre;intm=20010000;Menu_name();for(inti=0;i<=10;i+)studenti.Num=i;ai.p=
11、&studenti;)student0.score1=0;student0.score2=0;student0.score3=0;student1.score1=85;student1.score2=88;student1.score3=97;student2.score1=92.5;student2.score2=91;student2.score3=95;student3.score1=95;student3.score2=98;student3.score3=99;student4.score1=85;student4.score2=87;student4.score3=96.5
12、;student5.score1=96;student5.score2=93;student5.score3=100;student6.score1=72;student6.score2=76;student6.score3=70.5;student7.score1=65;student7.score2=53;student7.score3=53;student8.score1=88;student8.score2=94;student8.score3=90.5;student9.score1=96.5;student9.score2=83;student9.score3=65;輸入學生信息p
13、rintf("堆排序操作nn");for(i=0;i<=10;i+)(studenti.Num=m;ai.p=&studenti;ai.total=studenti.score1+studenti.score2+studenti.score3;m+;/構造堆樹printf("未排序前的堆結點信息n");Displayarray(a);system("pause");system("cls");intkeep=HeapSize;HeapSort(a,HeapSize);printf("n堆排序結果:n");Displayarray(a);printf("n");system("pause");BT=NULL;printf("分類二叉樹的操作n");for(i=1;i<10;i+)(SortBinaryTreeInsert(BT,ai);/構造分類二叉樹for(;)(printf("請輸入您要查找的學生的總分,輸入0結束查找)scanf("%f&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 粵人版地理八年級下冊《第二節(jié) 重要的地理分界線》聽課評課記錄1
- 新人教版七年級數學上冊 3.1.2 《等式的性質》聽評課記錄
- 七年級(人教版)集體備課聽評課記錄:3.2《解一元一次方程(一)-合并同類項與移項1》
- 新蘇教版六年級數學下冊聽評課記錄
- 三年級語文上聽評課記錄
- 蘇科版數學七年級下冊10.2《二元一次方程組》聽評課記錄
- 人教版地理七年級下冊第十章《極地地區(qū)》聽課評課記錄1
- 人教版數學八年級下冊《19.3 課題學習 選擇方案》聽評課記錄
- 新人教版七年級數學上冊1.3.2《有理數的減法》聽評課記錄2
- 八年級道德與法治上冊聽課評課記錄第一單元走進社會生活
- 護理工作中的人文關懷
- 完整液壓系統(tǒng)課件
- 2024年山東省青島市中考道德與法治試題卷(含答案及解析)
- 生產制造工藝流程規(guī)范與作業(yè)指導書
- 班級建設方案中等職業(yè)學校班主任能力大賽
- T-TJSG 001-2024 天津市社會組織社會工作專業(yè)人員薪酬指導方案
- 芯片設計基礎知識題庫100道及答案(完整版)
- 00015-英語二自學教程-unit2
- 2024變電站無人機巡檢系統(tǒng)規(guī)范第2部分:檢測規(guī)范
- 人教版九上化學第二單元課題2氧氣課件
- 三年級上冊乘法豎式計算200道及答案
評論
0/150
提交評論