2023年動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告_第1頁
2023年動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告_第2頁
2023年動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告_第3頁
2023年動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告_第4頁
2023年動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

動(dòng)態(tài)查找表實(shí)驗(yàn)報(bào)告一.1、實(shí)驗(yàn)概要實(shí)驗(yàn)項(xiàng)目名稱:抽象數(shù)據(jù)類型的實(shí)現(xiàn)實(shí)驗(yàn)項(xiàng)目性質(zhì):設(shè)計(jì)性實(shí)驗(yàn)所屬課程名稱:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)計(jì)劃學(xué)時(shí):62、實(shí)驗(yàn)?zāi)康膶?duì)某個(gè)具體的抽象數(shù)據(jù)類型,運(yùn)用課程所學(xué)的知識(shí)和方法,設(shè)計(jì)合理的數(shù)據(jù)結(jié)構(gòu),并在此基礎(chǔ)上實(shí)現(xiàn)該抽象數(shù)據(jù)類型的所有基本操作。通過本設(shè)計(jì)性實(shí)驗(yàn),檢查所學(xué)知識(shí)和能力,發(fā)現(xiàn)學(xué)習(xí)中存在的問題。進(jìn)而達(dá)成純熟地運(yùn)用本課程中的基礎(chǔ)知識(shí)及技術(shù)的目的。實(shí)驗(yàn)規(guī)定如下:1.參與實(shí)驗(yàn)的學(xué)生應(yīng)一方面了解設(shè)計(jì)的任務(wù),然后根據(jù)自己的基礎(chǔ)和能力從中選擇一題。一般來說,選擇題目應(yīng)以在規(guī)定的時(shí)間內(nèi)能完畢,并能得到應(yīng)有的鍛煉為原則。若學(xué)生對(duì)教材以外的相關(guān)題目較感愛好,希望選作實(shí)驗(yàn)的題目時(shí),應(yīng)征得指導(dǎo)教師的認(rèn)可,并寫出明確的抽象數(shù)據(jù)類型定義及說明。2.實(shí)驗(yàn)前要作好充足準(zhǔn)備,涉及:理解實(shí)驗(yàn)規(guī)定,掌握輔助工具的使用,了解該抽象數(shù)據(jù)類型的定義及意義,以及其基本操作的算法并設(shè)計(jì)合理的存儲(chǔ)結(jié)構(gòu)。3.實(shí)驗(yàn)時(shí)嚴(yán)厲認(rèn)真,要嚴(yán)格按照規(guī)定獨(dú)立進(jìn)行設(shè)計(jì),不能隨意更改。注意觀測(cè)并記錄各種錯(cuò)誤現(xiàn)象,糾正錯(cuò)誤,使程序滿足預(yù)定的規(guī)定,實(shí)驗(yàn)記錄應(yīng)作為實(shí)驗(yàn)報(bào)告的一部分。4.實(shí)驗(yàn)后要及時(shí)總結(jié),寫出實(shí)驗(yàn)報(bào)告,并附所打印的問題解答、程序清單,所輸入的數(shù)據(jù)及相應(yīng)的運(yùn)營結(jié)果。所用軟件環(huán)境或工具:DEV-C++5可視化編程環(huán)境.3.動(dòng)態(tài)查找表的抽象數(shù)據(jù)類型?ADTDynamicSearchTable{

數(shù)據(jù)對(duì)象D:D是具有相同特性的數(shù)據(jù)元素的集合。每個(gè)數(shù)據(jù)元素具有類型相同的關(guān)鍵字,可唯一?標(biāo)記數(shù)據(jù)元素。

數(shù)據(jù)關(guān)系R:數(shù)據(jù)元素同屬一個(gè)集合。

基本操作P:

InitDSTable(&DT);?操作結(jié)果:構(gòu)造一個(gè)空的動(dòng)態(tài)查找表DT。

DestroyDSTable(&DT);?初始條件:動(dòng)態(tài)查找表DT存在;?操作結(jié)果:銷毀動(dòng)態(tài)查找表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(&T,key);?初始條件:動(dòng)態(tài)查找表DT存在,key為和關(guān)鍵字類型相同的給定值;?操作結(jié)果:若DT中存在其關(guān)鍵字等于key的數(shù)據(jù)元素,則刪除之。

TraverseDSTable(DT,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()失敗,則?操作失敗。?}ADTDynamicSearchTable動(dòng)態(tài)查找表的特點(diǎn)二叉排序樹是一種動(dòng)態(tài)樹表,其特點(diǎn)是,樹的結(jié)構(gòu)通常不是一資生成的,面是在查找過程中,當(dāng)樹中不存在關(guān)鍵字等于給定值的結(jié)點(diǎn)時(shí)再進(jìn)行插入。新插入的結(jié)點(diǎn)一定是一個(gè)新添加的葉子結(jié)點(diǎn),并且是查找不成功時(shí)查找途徑上訪問的最后一個(gè)結(jié)點(diǎn)的左孩子或右孩子結(jié)點(diǎn)。算法設(shè)計(jì)#include<stdio.h>#include<malloc.h>#include<conio.h>#include<cstdlib>#include<iostream>typedefstructElemType{ intkey;}ElemType;typedefstructbitnode{//二叉樹的二叉鏈表存儲(chǔ)表達(dá)?ElemTypedata;?structbitnode*lchild,*rchild;//左右孩子指針?intlength;}bitnode,*bitree;bitreeSearch(bitreeT,ElemTypee,bitreef,bitree&p)//在二叉排序樹中查找數(shù)據(jù){ if(!T)?{ ?p=f; ?returnNULL;?}//查找不成功?elseif(T->data.key==e.key) { p=T;returnT; }//查找成功 elseif(T->data.key>e.key) ?returnSearch(T->lchild,e,T,p); else returnSearch(T->rchild,e,T,p);}//在二叉排序樹中查找數(shù)據(jù)voidInsert(bitree(cuò)&T,ElemTypee)//在二叉排序樹中插入數(shù)據(jù){ bitreep,s;?if(!Search(T,e,NULL,p))//查找不成功 { ?s=(bitree)malloc(sizeof(bitnode));? s->data=e; s->lchild=s->rchild=NULL;??if(!p)T=s;//被插入結(jié)點(diǎn)*s為新的根結(jié)點(diǎn) elseif(e.key<p->data.key)p->lchild=s;//被插結(jié)點(diǎn)*s為左孩子 ?elsep->rchild=s;//被插結(jié)點(diǎn)*s為右孩子??return; } elsereturn;}voidInit(bitree&T)//構(gòu)造一個(gè)動(dòng)態(tài)查找表T{intx;inti;intn;ElemTypee; printf("請(qǐng)輸入結(jié)點(diǎn)個(gè)數(shù):");?scanf("%d",&x);?for(i=1;i<=x;i++) {?printf("第%d個(gè)結(jié)點(diǎn)數(shù)據(jù)值:",i);?scanf("%d",&n); e.key=n;?Insert(T,e); }printf("二叉排序樹已經(jīng)建立!\n");}voidDestory(bitreeT)//后序遍歷二叉樹,銷毀動(dòng)態(tài)查找表T{?if(T) {if(T->lchild) DestoryTree(T->lchild);if(T->rchild) DestoryTree(T->rchild); free(cuò)(T);??T=NULL;?}}voidDelete(bitree&p)//從二叉排序樹中刪除結(jié)點(diǎn)p,并重接它的左或右子樹{?bitree(cuò)q,s;?if(!p->rchild)//右子樹空,只需重接它的左子樹?{ q=p;??p=p->lchild;? free(q); q=NULL;?}?elseif(!p->lchild)//左子樹空,只需重接它的右子樹?{??q=p;??p=p->rchild;??free(q);? q=NULL; }?else{//左右子樹均不空 ?q=p; s=p->lchild; while(s->rchild)//向右走到盡頭??{ ??q=s;?? s=s->rchild; ?}? p->data=s->data;//將被刪結(jié)點(diǎn)的前驅(qū)s的內(nèi)容直接替代該結(jié)點(diǎn)的內(nèi)容 if(q!=p)//若被刪除結(jié)點(diǎn)的左子樹的右子樹不為空 ??q->rchild=s->lchild;//重接*q的右子樹? else ? q->lchild=s->lchild;//重接*q的左子樹? free(s); ?s=NULL; }}//刪除結(jié)點(diǎn)voidDeletebit(bitree&T,intn)//刪除二叉排序樹中的數(shù)據(jù){?if(!T) return;//不存在關(guān)鍵字等于n的數(shù)據(jù)元素 else{??if(T->data.key==n) ?return(Delete(T));//找到關(guān)鍵字等于n的數(shù)據(jù)元素并刪除它??elseif(T->data.key>n)? Deletebit(T->lchild,n);//繼續(xù)在左子樹中刪除? else ? Deletebit(T->rchild,n);//繼續(xù)在右子樹中刪除??return;?}}voidXianxu(bitreeT)//先序遍歷{ if(T!=NULL)?{?printf("%d\t",T->data.key); Xianxu(T->lchild); ?Xianxu(T->rchild);?}}voidZhongxu(bitreeT)//中序遍歷{ if(T!=NULL)?{ ?Zhongxu(T->lchild);?printf("%d\t",T->data.key); ?Zhongxu(T->rchild); }}voidHouxu(bitree(cuò)T)//后序遍歷{ if(T!=NULL)?{??Houxu(T->lchild); Houxu(T->rchild);??printf("%d\t",T->dat(yī)a.key); }}intmain(){ bitreeT=NULL,p; ElemTypee; intn; inth;?charc;do{printf("***********************************************************\n");printf("**\n");printf("*動(dòng)態(tài)查找表*\n");printf("*1.建立二叉排序樹*\n");printf("*2.二叉排序樹查找元素*\n");printf("*3.二叉排序樹插入元素*\n");printf("*4.二叉排序樹刪除元素*\n");printf("*5.遍歷二叉排序樹*\n");printf("*6.銷毀二叉排序樹*\n");printf("*7.退出*\n");printf("**\n");printf("***********************************************************\n");??printf("請(qǐng)輸入你的選擇:\n");? scanf("%d",&h); switch(h)? {? case1:????Init(T);???break; ??case2:chara; ???printf("請(qǐng)輸入要查找的數(shù)據(jù):\n");?? scanf("%d",&n);? ?e.key=n;????if(Search(T,e,NULL,p))? ??printf("數(shù)據(jù)已經(jīng)存在!\n"); ? else ?? {?printf("數(shù)據(jù)不存在!\n"); ? }?? ?break; case3:? ?printf("請(qǐng)輸入要插入的數(shù)據(jù):\n"); ? ?scanf("%d",&n);? e.key=n; ? if(Search(T,e,NULL,p)) ????printf("已經(jīng)存在!\n");??? else ? {?? ? Insert(T,e);? printf("成功插入!\n");? ??} ? break; case4:??? printf("請(qǐng)輸入要?jiǎng)h除的數(shù)據(jù):\n"); ???scanf("%d",&n);? ?e.key=n; ? if(Search(T,e,NULL,p)) ? { ???Deletebit(T,n);? ? printf("已經(jīng)成功刪除!\n");?? ?}? ?elseprintf("數(shù)據(jù)不存在!\n");? ?break;?case5:intz;do {printf("********************************************************************\n");printf("**\n");printf("*遍歷二叉排序樹*\n");printf("*1.先序遍歷二叉排序樹*\n");printf("*2.中序遍歷二叉排序樹*\n");printf("*3.后序遍歷二叉排序樹*\n");printf("*4.退出*\n");printf("**\n");printf("********************************************************************\n");printf("請(qǐng)輸入你的選擇:\n");scanf("%d",&z);switch(z)??{case1:? ?printf("先序遍歷二叉排序樹:"); ? ?Xianxu(T);?? ?printf("\n");? ?break;?? case2: ???printf("中序遍歷二叉排序樹:");??? Zhongxu(T); printf("\n");? ??break;? case3: ??printf("后序遍歷二叉排序樹:");?? ?Houxu(T); ?? printf("\n"); ??break;case4:??? printf("退出!返回上級(jí)菜單!\n"); ??break;?default:printf("選擇錯(cuò)誤,重新開始!\n");}}while(z!=4);break;case6: ??printf("擬定是否要銷毀二叉排序樹?(y/n)\n");scanf("\n%c",&c);? ?getch();? ?if(c=='y') ??{ ? Destory(T);? ? printf("所選數(shù)據(jù)已成功銷毀!\n"); getch();? ? T=NULL;} ?? else? ??printf("所選數(shù)據(jù)銷毀失??!\n");? ??break;case7:??? printf("退出?。躰");? ?? break;??default:printf("選擇錯(cuò)誤,重新開始!\n");??? }}while(h!=7);}調(diào)試主頁面建立二叉排序樹輸入十個(gè)數(shù)據(jù):10,15,26,96,82,37,46,50,61,03,99查找元素:26存在則輸出插入元素:刪除元素:56(不存在)99(存在)遍歷:跳入二級(jí)子菜單,里邊分別有三種遍歷方式可供選擇,分別為先序,中序,后序6.在子菜單中選擇4退出則返回到上級(jí)菜單,即主頁面7銷毀二叉樹:先詢問是否確認(rèn)要銷毀,輸入y則銷

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論