實驗報告
姓
課程名稱:
院(系
專業/年級:
實驗四
—- - 查找
一、實驗目得 1. 掌握順序表得查找方法,尤其就是折半查找方法; 2. 掌握二叉排序樹得查找算法。
二、實驗預習內容 請在上機前認真閱讀教材及實驗指導書 , 并在以下空白處填寫相應得內容 . 1. 請寫出簡單順序查找算法。
int seq_search(elementtype A[],int n, keytype x)
{
i=n;A[0]、key=x;
while(A[i]、key=x)
i-—;
return i; } 2. 請寫出有序表二分(折半)查找算法。
(1)非遞歸算法 int bin_search(elementtype A[],int n,keytype x)
{ int mid,low=0,high=n-1;
//初始化查找區域
while(low<=high)
{ mid=(low+high)/2;
if(x==A[mid]、key return mid;
else if(x<A[mid、key])high=mid-1;
else low=mid+1;
}
return —1;
//返回查找失敗得標志 } (2)遞歸算法 int bin_search(elementtype A[],int low,int high,keytype x) { int mid;
if( low>high)
return -1;//查找失敗
else { mid=(low+high)/2;//求解中間元素得下標
if( x==A[mid]、key ) return mid;//查找成功
else if( x<A[mid]、key )
return bin_search(A,low,mid-1,x);//將在左邊區域查找得結果作為在整個區域得查找結果返回
else return bin_search(A,mid+1,high,x);
//將在右邊區域查找得結果作為在整個區域得查找結果返回
} }
3. 二叉排序樹查找算法: 1)請寫出二叉排序樹結點得結構體定義語句。
typedef char datatype; typedef struct node {
keytype key;
datatype data;
struct node * lchild, *rchild; }BSTnode;
2)請寫出二叉排序樹中插入結點得算法. void insert (Bnode *&T,Bnode *S)
//將指針 S 所指結點插入到二叉排序樹 T 中 {
if (T==NULL)
T=S;
//插入到空樹時,插入結點成為根結點
else if (S—〉key<T—>key)
insert (T->lchild,S);
//插入到 T 得左子樹中
else insert(T—>rchild,S);
//插入到 T 得右子樹中 }
3)請寫出二叉排序樹構造得算法。
void create_bst(Bnode *&T);
//通過插入結點構造二叉排序樹得算法 {
Bnode * u;elementtype x;
T=NULL;cin〉>x;
//初始化根指針并讀入第一個元素值
While (x!=end_of_num)
//x 不就是結束符時
{
u=new Bnode; u->data=x;
//產生新結點并裝入數據
u->lchild=NILL;u->rchild=NULL;
//設置左、右孩子指針為空
insert (T,u);
//插入結點到二叉排序樹 T 中
cin〉>x;
//讀入下一個元素得值
} } 4)請寫出二叉排序樹查找得算法.
非遞歸算法:
Bnode * bst_search(Bnode * T,keytype x) {
Bnode * P=T;
//P 指向根
while (p!=NULL)
if( x==p-〉key) return p;
//查找成功
else if( x〈p->key=p—〉lchild);
//到左子樹中繼續查找
else
p=p—>rchild;
//到右子樹中繼續查找
return p;
//返回結果可能為空,也可能非空 } 遞歸算法:
Bnode * bst_search(Bnode * T,keytype x) {
if (T==NULL || t—>key=x)
return T;
//子樹為空或已經找到時均可結束
else
if(x〈T->key)
return bst_search(T->lchild, x);
//左子樹中查找得結果就就是函數得結果
else
return bst_search(T->rchild, x);
//右子樹中查找得結果就就是函數得結果 } 三、上機實驗 1. 實驗內容.
1)建立一個順序表,用順序查找得方法對其實施查找; 2)建立一個有序表,用折半查找得方法對其實施查找; 3)建立一個二叉排序樹,根據給定值對其實施查找; 4)對同一組數據,試用三種方法查找某一相同數據,并嘗試進行性能分析。
2. 實驗源程序。
(1)
#include 〈stdio、h> #include <stdlib、h〉 #define max 100 int x; typedef struct
{
;]xam[atad tni? ;neltsil tni?}seqlist; void initial_list(seqlist *L) {
L->listlen=0; } void list_creat(seqlist *L) {
int i;
;++neltsil>—L? i=L->listlen;
;x=]i[atad〉-L?} int last_search(seqlist *L) {
int i;
;neltsil>-L=i? L->data[0]=x;
while(L->data[i]!=x)
i——;
return i; } int first_search(seqlist *L)
{
int i,n;
n=L->listlen;
)++i;n=<i;1=i(rof? {?
)x==]i[atad>-L(fi?
;i nruter? }? return -1; } int bin_search(seqlist *L)
{
int mid,low=1,high=L—>listlen;
)hgih=<wol(elihw? {? ? mid=(low+high)/2;
? if(x==L->data[mid])
?
;dim nruter?
else if(x<=L->data[mid])
high=mid—1;
esle?
low=mid+1;
}? ;1— nruter?} int main(void)
{
seqlist *L;
L=(seqlist*)malloc(sizeof(seqlist));
int a,b,c;
;)L(tsil_laitini? printf("您想創建有序得查找表(以-1 結束):”);
scanf("%d",&x);
while(x!=-1)
{
;)L(taerc_tsil?
scanf(”%d”,&x);
}
printf("請輸入您想查找得數:");
;)x&,”d%”(fnacs?
printf("順序查找---您所要找數得下標號:");
a=first_search(L);
if(a==—1)
;)"!數得查要所您有沒"(ftnirp? esle?
printf("%d”,a);
printf("\n”);
printf("倒序查找——-您所要找數得下標號:");
b=last_search(L);
if(b==0)
printf("沒有您所要查得數!");
esle? ? printf("%d",b);
printf("\n");
printf("折半查找——-您所要找數得下標號:");
c=bin_search(L);
if(c==-1)
;)”!數得查要所您有沒"(ftnirp?? else
? printf("%d",c);
printf("\n");
;0 nruter?} (2)
#include<stdio、h>
#include〈string、h> #include<stdlib、h> typedef struct BTnode {
int data;
struct BTnode *lchild,*rchild; } BTnode,*Bnode; void insert(Bnode &T,Bnode
S)
{
)LLUN==T(fi?
;S=T? )atad〉-T<atad>—S(fi esle? ? insert(T—>lchild,S);
else insert(T->rchild,S); } void create_bat(Bnode &T) {
Bnode u;
;x tni? ;LLUN=T? printf("put a number:");
;)x&,"d%”(fnacs? )1-=!x(elihw? {?
;))edonTB(foezis(collam)*edonTB(=u?
;x=atad>-u?
u->lchild=NULL;
u—〉rchild=NULL;
insert(T,u);
;)”:rebmun a tup"(ftnirp?
;)x&,”d%"(fnacs? } } Bnode bst_search(Bnode T,int x) {
)x==atad〉-T||LLUN==T(fi?
return T;
)x〉)atad〉-T((fi esle? ;)x,dlihcl>—T(hcraes_tsb nruter?? else
? return bst_search(T->rchild,x); }
int main()
{
int x;
;p,T edonB? printf("請先建立一棵二叉排序樹:”);
;)"n\"(ftnirp? create_bat(T);
;)":字數得找查要您入輸請"(ftnirp?
scanf(”%d",&x);
;)x,T(hcraes_tsb=p? )LLUN=!p(fi? ? printf("已找到您要查找得數!");
esle?
;)"!數得找查要您有沒!起不對"(ftnirp? ;)"n\”(ftnirp? ;0 nruter?} 3、
實驗結果。
四、實驗總結(實驗過程中出現得問題、解決方法、結果或其它)
問題:1、輸入程序時得手誤
2、粗心漏寫程序
3、程序格式錯誤
解決方法:編譯后根據錯誤提示改正 結果:程序正確運行,截圖并完成實驗報告
推薦訪問: 查找 實驗 報告同志們:今天這個大會,是市委全面落實黨要管黨、從嚴治黨要求的一項重大舉措,也是對縣市區委書記履行基層黨建工作第一責任人情況的一次集中檢閱,同時是對全市基層黨建工作的一次再部署、再落實的會議。前面,**
***年,我認真履行領班子、帶隊伍、抓黨員、保穩定的基層黨建工作思路,以學習貫徹習近平新時代中國特色社會主義思想和黨的十九大歷次全會精神為主線,以市局基層黨建工作考核細則為落腳點,落實全面從嚴治黨主體
根據會議安排,現將2022年履行抓基層黨建工作職責情況報告如下:一、履職工作特色和亮點1 突出政治建設,著力在思想認識上提高。牢固樹立抓黨建就是抓政績的理念,以“黨建工作抓引領、社區治理求突破,為民服
2022年以來,在**黨委的正確領導下,堅持以習近平新時代中國特色社會主義思想為指導,深入學習宣傳貫徹黨的二十大精神,以黨建工作為統領,扎實開展夯實“三個基本”活動,以“四化四力”行動為抓手,聚力創建
各位領導,同志們:根據會議安排,現就2022年度抓基層黨建工作情況匯報如下:一、主要做法及成效(一)強化政治引領。一是不斷強化理論武裝。堅持通過黨組會、中心組學習會和“三會一課”,第一時間、第一議題學
2022年度抓基層黨建工作述職報告按照黨委工作部署,現將本人2022年度抓基層黨建工作情況報告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發展首要位置,積極開展
2022年,是我在數計系黨總支書記這個新崗位上度過的第一個完整的工作年度。回首一年來在校黨委的正確領導下,與數計系領導班子和全體師生共同走過的日子,艱辛歷歷在目,收獲溫潤心田。作為黨總支書記,我始終牢
按照考核要求,現將本人一年來,作為統戰部長履行職責、廉潔自律等方面情況報告如下:一、著眼增強政治素質,不斷深化理論學習堅持把旗幟鮮明講政治作為履職從政的第一位要求,帶領統戰系統干部堅決擁護“兩個確立”
**年,緊緊圍繞黨工委、管委會的決策部署,全體人員團結協作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開拓進取,認真履職盡責,圓滿完成各項工作任務。一、個人思想政治狀況檸檬文苑www bgzjy
按照縣委關于開展抓基層黨建述職評議會議的有關要求,經請示縣委組織部同意,今天,我們在此召開2022年度基層黨組織書記抓基層黨建述職評議會議。1 首先,請**黨委書記,**同志述職。**黨委能夠主動研究