【實驗類別】
綜合性實驗
【實驗目的】
1、掌握查詢的不同方法,並能用高階語言實現查詢演算法。
2、熟練掌握順序表和有序表的查詢方法。
3、熟練掌握二叉排序樹的構造、查詢、插入和刪除方法
【實驗學時】
2小時【實驗組人數】
1人。【實驗裝置環境】
計算機。
【問題描述】
動態查詢表的特點是表結構本身在查詢過程中動態生成,即對給定的關鍵字key,若表中存在其關鍵字等於key的記錄,則查詢成功返回,否則插入關鍵字等於key的記錄。設計乙個有關動態查詢表(以二叉排序樹為例)的建立、查詢、插入和刪除等基本操作的演示程式。
參考:【測試資料】
1.根據執行提示,在建立時輸入:
please input data(-1:end)
45 24 53 45 12 24 90 –1
input the key you want to search: 90
success,the value is 90
continue(y/n):y
input the key you want to search:100
unsuccess
continue(y/n):n
2.讀者可根據執行提示,自己輸入資料建立一棵二叉排序樹,然後進行多次查詢。注意觀察執行結果,讀者可自己先在紙上畫出這棵二叉排序樹,注意分析和比較執行結果,以加強對二叉樹排序的建立和查詢過程的理解。
【說明】
1. 簡單的演算法分析:設二叉排序樹的結點數目為n,在等概率情況下二叉排序樹的查詢成功的平均查詢長度與二叉排序樹的形狀有關,最壞情況(二叉排序樹成為一棵單枝樹,即每個結點至多乙個分支),asl成功= = ;最好情況(二叉排序樹與n個的結點的折半查詢樹形態相同)asl成功= );
2. 資料元素型別定義時只寫了關鍵字,若有其他資料項略,讀者可根據實際情況加入,並在資料元素的輸入和輸出中加入其它資料項即可。
//sdtbu
//計科181
//l#include
#include
#include
#include
#include
#include
using namespace std;
typedef
int elemtype;
///二叉排序樹的二叉鍊錶儲存結構
typedef
struct btnode
btnode,
*bstree;
///建立二叉排序樹
bstree insertbst
(bstree t, btnode *s)
}return t;
}bstree createbst()
else
}return t;
}///查詢
btnode *
searchbst
(bstree t,
int key)
else
else}}
///插入
bstree insertbst_key
(bstree t,
int key)
else
return t;
}///刪除
btnode *
searchbst_f
(bstree t,
int key, bstree *f)
}bstree deletebst
(bstree t, btnode *p, btnode *f)
break
;case2:
if(!f) t = p->lchild;
else
free
(p);
break
;case3:
if(!f) t = p->rchild;
else
free
(p);
break
;case4:
par = p;
s = p->lchild;
while
(s->rchild !=
null
) p->key = s->key;
if(par == p)
par->lchild = s->lchild;
else
par->rchild = s->lchild;
free
(s);
break;}
return t;
}bstree searchdeletebst
(bstree t,
int key)
else
//printf("刪除成功!\n");
return t;
}void
menu()
intmain()
else
if(n==2)
else
if(n==3)
else
if(n==4)
else
break;}
return0;
}
C語言資料結構靜態動態查詢表實驗
演算法1 採用順序儲存結構建立靜態查詢表,對查詢表進行順序查詢和改進的順序查詢,並對其查詢效率進行比較 演算法2 採用順序儲存結構建立靜態查詢表 有序表,對有序表進行二分查詢 include include define eq a,b a b define lt a,b a b define lq ...
資料結構實驗七 查詢
版權申明 實驗七 查詢 實驗目的 掌握折半查詢演算法 理解其時間複雜度與順序查詢的不同。實驗內容 1.構建乙個順序儲存的數表 或陣列 宣告low,high和middle變數 2.0號單元不用,當操作返回0時,意味著該數不存在數表 或陣列 中 3.在low high時,比較middle位置的值和查詢的...
C語言動態資料結構 鍊錶
動態資料結構聊邊的變數不是通過型別識別符號定義,而是程式執行時如果需要在想系統申請。變數所占用的記憶體單元不一定是連續存放的。整體所佔的統建隨元素的個數變化而變化,從而減少了空間的浪費。鍊錶的用途 1 用來代替陣列元素個數不定的陣列 2 在資料庫管理程式中用來對磁碟檔案的儲存操作。用 的形式,簡單介...