一、實驗內容
1、二叉排序樹。 任意給定一組資料,設計乙個演算法,建立一棵二叉排序樹,對它進行查詢、插入、刪除等操作。
2、構造雜湊表,key值由隨機數獲得,自己選擇解決衝突的演算法。並且計算查詢次數及平均查詢次數。
一、源程式
二叉排序樹:
1 #include2 #include3using
namespace
std;
4#define ok 1
5#define overflow -1
6#define error 0
7#define maxsize 100
8int
typedef status;
9 typedef struct
elemtype;
13 typedef struct bstnodebstnode,*bstree;
18 bstree searchbst(bstree t, int key)
24void insertbst(bstree &t, elemtype e)
32else
if (e.key < t->data.key)
35else
if (e.key>t->data.key)38}
39void creatbst(bstree &t)51}
52void deletebst(bstree &t, int key)//
刪除53
62if (!p)return
;63 q =p;
64if ((p->lchild) && (p->rchild))
69 p->data = s->data;
70if (q != p)q->rchild = s->lchild;
71else q->lchild = s->lchild;
72delete
s;73
return;74
}75else
if (!p->rchild)
78else
if (!p->lchild)
81if (!f)t =p;
82else
if (q == f->lchild)f->lchild =p;
83else f->rchild =p;
84delete
q;85}86
intmain()
112if (n == 3
)115
if (n == 4
)121
if (n == 0)break
;122
}123 }
雜湊表:
#include#include#include
using
namespace
std;
#define ok 1
#define overflow -1
#define error 0
#define maxsize 100
inttypedef status;
#define m 20typedef
structhashtable[m];
#define nullkey 0
intrandom()
int h(int
key)
int searchhash(hashtable ht, int key)
return -1
; }
}int
main()
for (int i = 0; i < m; i++)
else}}
}for (int i = 0; i < m; i++)
cout
<< "
查詢次數\n
"cout
<< "
平均查詢次數\n
"<< (j / 20) *key=0;
cout << "請輸入要查詢的數" << endl;
cin >> key;
searchhash(ht, key);
*/}
構造二叉排序樹(BST) 二叉排序樹的刪除
主要是刪除操作 include include using namespace std typedef int elementtype typedef struct treenode threadtree void visit treenode node void inorder threadtre...
雜湊表與二叉排序樹的比較
此段來自 極客時間 王爭老師的資料結構與演算法 我們在雜湊表那節中講過,雜湊表的插入 刪除 查詢操作的時間複雜度可以做到常量級的 o 1 非常高效。而二叉查詢樹在比較平衡的情況下,插入 刪除 查詢操作時間複雜度才是 o logn 相對雜湊表,好像並沒有什麼優勢,那我們為什麼還要用二叉查詢樹呢?我認為...
查詢表 二叉排序樹
資料結構實驗之查詢一 二叉排序樹 time limit 400 ms memory limit 65536 kib problem description 對應給定的乙個序列可以唯一確定一棵二叉排序樹。然而,一棵給定的二叉排序樹卻可以由多種不同的序列得到。例如分別按照序列和插入初始為空的二叉排序樹,...