![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告1_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-8/8/6092dc99-4296-48fe-b542-607fa205bae8/6092dc99-4296-48fe-b542-607fa205bae81.gif)
![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告1_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-8/8/6092dc99-4296-48fe-b542-607fa205bae8/6092dc99-4296-48fe-b542-607fa205bae82.gif)
![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告1_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-8/8/6092dc99-4296-48fe-b542-607fa205bae8/6092dc99-4296-48fe-b542-607fa205bae83.gif)
![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告1_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-8/8/6092dc99-4296-48fe-b542-607fa205bae8/6092dc99-4296-48fe-b542-607fa205bae84.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告題目:動(dòng)態(tài)查找表學(xué)院計(jì)算機(jī)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)年級(jí)班別2009級(jí) 2 班學(xué)號(hào)3109005935學(xué)生姓名黃麗敏指導(dǎo)教師吳偉民成績(jī)_2011年6月 一. 動(dòng)態(tài)查找表: 抽象數(shù)據(jù)類型動(dòng)態(tài)查找表的定義如下:adt dynamicsearchtable數(shù)據(jù)對(duì)象d:d是具有相同特性的數(shù)據(jù)元素的集合。各個(gè)數(shù)據(jù)元素均含有類型相同,可唯一標(biāo)識(shí)數(shù)據(jù)元素的關(guān)鍵字?jǐn)?shù)據(jù)關(guān)系r:數(shù)據(jù)元素同屬一個(gè)集合?;静僮鱬:initdstable(&dt);操作結(jié)果:構(gòu)造一個(gè)空的動(dòng)態(tài)查找表dt。destroydstable(&dt)初始條件:動(dòng)態(tài)查找表dt存在。操作結(jié)果:銷毀動(dòng)態(tài)
2、查找表dt。searchdstable(dt,key);初始條件:動(dòng)態(tài)查找表dt存在,key為和關(guān)鍵字類型相同的給定值。操作結(jié)果:若dt中存在其關(guān)鍵字等于key的數(shù)據(jù)元素,則函數(shù)值為該元素的值或在表中的位置,否則為“空”。insertdstable(&dt,e);初始條件:動(dòng)態(tài)查找表dt存在,e為待插入的數(shù)據(jù)元素。操作結(jié)果:若dt中不存在其關(guān)鍵字等于e.key的數(shù)據(jù)元素,則插入e到dt。deletedstable(&dt,key);初始條件:動(dòng)態(tài)查找表dt存在,key為和關(guān)鍵字類型相同的給定值。操作結(jié)果:若dt中存在其關(guān)鍵字等于key的數(shù)據(jù)元素,則刪除之。traversedstable(dt,
3、visit();初始條件:動(dòng)態(tài)查找表dt存在,visit是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)。操作結(jié)果:按某種次序?qū)t的每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)visit()一次且至多一次,一旦visit()失敗,則操作失敗。adt dynamicsearchtable二. 存儲(chǔ)結(jié)構(gòu)定義:公用頭文件ds0.h和宏定義:#include /* eof(=z或f6),null */#include#define true 1#define false 0#define ok 1#define n 10 /* 數(shù)據(jù)元素個(gè)數(shù) */typedef int status; /* status是函數(shù)的類型,其值是函數(shù)結(jié)果狀態(tài)代碼,如ok等 *
4、/typedef int keytype; /* 設(shè)關(guān)鍵字域?yàn)檎?*/#define eq(a,b) (a)=(b)#define lt(a,b) (a) 二叉排序樹(shù)存儲(chǔ)結(jié)構(gòu): 二叉排序樹(shù)的類型bitree定義如下:typedef int keytype; /* 設(shè)關(guān)鍵字域?yàn)檎?/typedef structkeytype key;int others; elemtype; /* 數(shù)據(jù)元素類型*/typedef elemtype telemtype;typedef struct bitnodetelemtype data;struct bitnode *lchild,*rchild; /*
5、 左右孩子指針*/bitnode,*bitree;三、算法設(shè)計(jì):/* 操作結(jié)果: 構(gòu)造一個(gè)空的動(dòng)態(tài)查找表dt */status initdstable(bitree *dt)*dt=null;return ok;/* 初始條件: 動(dòng)態(tài)查找表dt存在。操作結(jié)果: 銷毀動(dòng)態(tài)查找表dt */void destroydstable(bitree *dt) /* 同bo6-2.c */if(*dt) /* 非空樹(shù)*/if(*dt)-lchild) /* 有左孩子*/destroydstable(&(*dt)-lchild); /* 銷毀左孩子子樹(shù)*/if(*dt)-rchild) /* 有右孩子*/de
6、stroydstable(&(*dt)-rchild); /* 銷毀右孩子子樹(shù)*/free(*dt); /* 釋放根結(jié)點(diǎn)*/*dt=null; /* 空指針賦0 */* 在根指針t所指二叉排序樹(shù)中遞歸地查找某關(guān)鍵字等于key的數(shù)據(jù)元素,*/* 若查找成功,則返回指向該數(shù)據(jù)元素結(jié)點(diǎn)的指針,否則返回空指針。*/ bitree searchbst(bitree t,keytype1 key) if(!t)|eq(key,t-data.key)return t; /* 查找結(jié)束*/else if lt(key,t-data.key) /* 在左子樹(shù)中繼續(xù)查找*/return searchbst(t-l
7、child,key);elsereturn searchbst(t-rchild,key); /* 在右子樹(shù)中繼續(xù)查找*/* 在根指針t所指二叉排序樹(shù)中遞歸地查找其關(guān)鍵字等于key的數(shù)據(jù)元素,若查找*/* 成功,則指針p指向該數(shù)據(jù)元素結(jié)點(diǎn),并返回true,否則指針p指向查找路徑上*/* 訪問(wèn)的最后一個(gè)結(jié)點(diǎn)并返回false,指針f指向t的雙親,其初始調(diào)用值為null */void searchbst1(bitree *t,keytype1 key,bitree f,bitree *p,status *flag)if(!*t) /* 查找不成功*/*p=f;*flag=false;else if
8、eq(key,(*t)-data.key) /* 查找成功*/*p=*t;*flag=true;else if lt(key,(*t)-data.key)searchbst1(&(*t)-lchild,key,*t,p,flag); /* 在左子樹(shù)中繼續(xù)查找*/elsesearchbst1(&(*t)-rchild,key,*t,p,flag); /* 在右子樹(shù)中繼續(xù)查找*/* 當(dāng)二叉排序樹(shù)t中不存在關(guān)鍵字等于e.key的數(shù)據(jù)元素時(shí),插入e并返回true,*/* 否則返回false。*/status insertbst(bitree *t, elemtype1 e)bitree p,s;sta
9、tus flag; searchbst1(t,e.key,null,&p,&flag); if(!flag) /* 查找不成功*/s=(bitree)malloc(sizeof(bitnode);s-data=e;s-lchild=s-rchild=null;if(!p)*t=s; /* 被插結(jié)點(diǎn)*s為新的根結(jié)點(diǎn)*/else if lt(e.key,p-data.key)p-lchild=s; /* 被插結(jié)點(diǎn)*s為左孩子*/elsep-rchild=s; /* 被插結(jié)點(diǎn)*s為右孩子*/return true;elsereturn false; /* 樹(shù)中已有關(guān)鍵字相同的結(jié)點(diǎn),不再插入*/* 從
10、二叉排序樹(shù)中刪除結(jié)點(diǎn)p,并重接它的左或右子樹(shù)。*/void delete(bitree *p)bitree q,s;if(!(*p)-rchild) /* 右子樹(shù)空則只需重接它的左子樹(shù)(待刪結(jié)點(diǎn)是葉子也走此分支)*/q=*p;*p=(*p)-lchild;free(q);else if(!(*p)-lchild) /* 只需重接它的右子樹(shù)*/q=*p;*p=(*p)-rchild;free(q);else /* 左右子樹(shù)均不空*/q=*p;s=(*p)-lchild;while(s-rchild) /* 轉(zhuǎn)左,然后向右到盡頭(找待刪結(jié)點(diǎn)的前驅(qū))*/q=s; s=s-rchild; (*p)-d
11、ata=s-data; /* s指向被刪結(jié)點(diǎn)的前驅(qū)(將被刪結(jié)點(diǎn)前驅(qū)的值取代被刪結(jié)點(diǎn)的值)*/if(q!=*p)q-rchild=s-lchild; /* 重接*q的右子樹(shù)*/elseq-lchild=s-lchild; /* 重接*q的左子樹(shù)*/free(s);/* 若二叉排序樹(shù)t中存在關(guān)鍵字等于key的數(shù)據(jù)元素時(shí),則刪除該數(shù)據(jù)元素結(jié)點(diǎn),*/* 并返回true;否則返回false。*/status deletebst(bitree *t,keytype1 key)if(!*t) /* 不存在關(guān)鍵字等于key的數(shù)據(jù)元素*/return false;elseif eq(key,(*t)-data.
12、key) /* 找到關(guān)鍵字等于key的數(shù)據(jù)元素*/delete(t);else if lt(key,(*t)-data.key)deletebst(&(*t)-lchild,key);elsedeletebst(&(*t)-rchild,key);return true;/* 初始條件: 動(dòng)態(tài)查找表dt存在,visit是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)*/* 操作結(jié)果: 按關(guān)鍵字的順序?qū)t的每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)visit()一次且至多一次*/void traversedstable(bitree dt,void(*visit)(elemtype1)if(dt)traversedstable(dt-lchil
13、d,visit); /* 先中序遍歷左子樹(shù)*/visit(dt-data); /* 再訪問(wèn)根結(jié)點(diǎn)*/ traversedstable(dt-rchild,visit); /* 最后中序遍歷右子樹(shù)*/ 四、編譯:1.初次編譯會(huì)出現(xiàn)很多錯(cuò)誤,這主要是寫程序時(shí)的粗心大意還有一些潛在的定于或邏輯錯(cuò)誤,第一次運(yùn)行如下:2.錯(cuò)誤很多,經(jīng)過(guò)一番調(diào)試才發(fā)現(xiàn)定義結(jié)構(gòu)體時(shí)出了問(wèn)題,有些沒(méi)用到,有些重定義了,調(diào)試后如下:3.此時(shí)只剩下很少錯(cuò)誤,很明顯是i未定義,經(jīng)過(guò)修改調(diào)試后編譯通過(guò)。五、測(cè)試void print(elemtype c) /*以下主函數(shù)調(diào)用*/printf(%d,%d) ,c.key,c.other
14、s);void main() /*用于測(cè)試二叉排序樹(shù)的查找*/char q;bitree dt,p;int i,select;keytype j;elemtype k;elemtype r10=45,1,12,2,53,3,3,4,37,5,24,6,100,7,61,8,90,9,70,10; /* 測(cè)試數(shù)據(jù)*/ initdstable(&dt); /* 構(gòu)造空表*/for(i=0;iinsertbst(&dt,ri); /* 依次插入數(shù)據(jù)元素*/h1: printf(=動(dòng)態(tài)查找表演示系統(tǒng)=);printf(n);printf(1、遍歷原有表n);printf(2、查找表內(nèi)值n);print
15、f(3、刪除表內(nèi)值n);printf(4、插入一個(gè)值n);printf(5、銷毀表n);printf(6、退出系統(tǒng));printf(n);printf(請(qǐng)選擇你需要的操作(16):);scanf(%d,&select);switch(select)h2: case 1:printf(原有的表遍歷如下:n);traversedstable(dt,print);printf(n);printf(按任意鍵返回.);getchar();getchar();system(cls);goto h1;h3: case 2:printf(原有的表遍歷如下:n);traversedstable(dt,print
16、);printf(n);printf(n請(qǐng)輸入你要查找的值:);scanf(%d,&j);p=searchbst(dt,j);if(p)printf(n查找成功:);printf(%d,%d),p-data.key,p-data.others);/getchar();getchar();printf(n是否繼續(xù)查找?(y/n):);q=getchar();getchar();if(q=y|q=y) else system(cls);goto h1;elseprintf(查找失敗,表中無(wú)此值,是否繼續(xù)查找?(y/n):);getchar();q=getchar();if(q=y|q=y)goto
17、 h2;elsesystem(cls);goto h1;h4: case 3:printf(原有的表遍歷如下:n);traversedstable(dt,print);printf(n);printf(n請(qǐng)輸入你要?jiǎng)h除的值:);scanf(%d,&j);/getchar();/q=getchar();p=searchbst(dt,j);if(p)printf(刪除此值后:n);deletebst(&dt,j);traversedstable(dt,print);printf(n是否繼續(xù)刪除?(y/n):);getchar();q=getchar();if(q=y|q=y)goto h4;els
18、esystem(cls);goto h1; elseprintf(刪除失敗,表中無(wú)此值,請(qǐng)按任意鍵返回繼續(xù).);printf(n);getchar();getchar();goto h4;h5: case 4:printf(原有的表遍歷如下:n);traversedstable(dt,print);printf(n);printf(請(qǐng)輸入你要插入的值:);scanf(%d,&k.key);p=searchbst(dt,k.key);if(!p)printf(插入此值后:n);k.others=k.others+(n+1);insertbst(&dt,k);traversedstable(dt,print);printf(n);printf(是否繼續(xù)插入新值?(y|n):);getchar();q=getchar();if(q=y|q=y)goto h5;elsesyste
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全新員工入職合同下載
- 2025廣告發(fā)布委托合同書(shū)版范本
- 全新房地產(chǎn)買賣合同范文下載
- 公司業(yè)務(wù)擔(dān)保合同
- 單位貨物采購(gòu)合同格式
- 幼兒園股份合伙經(jīng)營(yíng)合作合同書(shū)
- 2024年中考物理(安徽卷)真題詳細(xì)解讀及評(píng)析
- 地板磚購(gòu)銷合同模板
- 拓寬知識(shí)面的重要性主題班會(huì)
- 2025如果合同標(biāo)的不合格怎么辦反擔(dān)保
- 韻達(dá)快遞員工勞務(wù)合同范本
- 血液透析水處理系統(tǒng)演示
- 附件:中鐵建工集團(tuán)項(xiàng)目精細(xì)化管理流程體系文件
- 小批量試制總結(jié)報(bào)告
- 2023年經(jīng)濟(jì)開(kāi)發(fā)區(qū)工作會(huì)議表態(tài)發(fā)言
- YY/T 0216-1995制藥機(jī)械產(chǎn)品型號(hào)編制方法
- 糖尿病足與周圍血管病01課件
- 2022年試行林木采伐管理方案
- 灌腸操作評(píng)分標(biāo)準(zhǔn)
- 企業(yè)年金基金管理機(jī)構(gòu)基本服務(wù)和收費(fèi)標(biāo)準(zhǔn)規(guī)范規(guī)范行業(yè)自律公約
- 小學(xué)二年級(jí)部編人教版上冊(cè)語(yǔ)文期末整理復(fù)習(xí)題
評(píng)論
0/150
提交評(píng)論