




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、/*題目:編寫循序查找程序* 編寫二分查找程序* 編寫建立二叉排序樹的程序* 編寫在二叉排序樹上的查找、輸入、刪除結點的程序* 編寫二叉排序樹的中序輸出的程序* 設計一個選擇式菜單,一級菜單形式如下:* 查 找 子 系 統* * * 1-順 序 查找 * * 2-二 分 查找 * * 3-二叉排序樹 * * 0-返 回 * * 請選擇菜單號(0-3):* 二叉排序樹的二級菜單如下:* 二叉排序樹* * * 1-更新二叉排序樹 * * 2-查 找 結 點 * * 3-插 入 結 點 * * 4-刪 除 結 點 * * 5-中序輸出排序樹 * * 0-返 回 * * 請選擇菜單號(0-5):*/#
2、include <stdio.h>#include <string.h>#include <stdlib.h>#define SEARCHMAX 30typedef struct node int trData; /根節點 struct node *lchild; /左子樹 struct node *rchild; /右子樹BtNode, *pBtNode;void seqSearch();void binSearch();void btSearch();pBtNode createBT();void searchBT(pBtNode T, int k);v
3、oid insBT(pBtNode *T, int k);void delBT(pBtNode *T, int k);void inorderBT(pBtNode T);void main() int choice, k = 1; while (k) printf("n 查 找 子 系 統n"); printf("*n"); printf("* 1-順 序 查找 *n"); printf("* 2-二 分 查找 *n"); printf("* 3-二叉排序樹 *n"); printf("
4、;* 0-返 回 *n"); printf("*n"); printf("請選擇菜單號(0-3):"); fflush(stdin); scanf("%d", &choice); switch(choice) case 1: seqSearch(); break; case 2: binSearch(); break; case 3: btSearch(); break; case 0: k = 0; break; default: printf("輸入錯誤,請重新輸入。"); getchar()
5、; k = 1; break; void seqSearch() /順序查找 int aSEARCHMAX, x, y, i; char ch; printf("建立一個整數的順序表(以-1結束):"); for (i = 0; i<SEARCHMAX; i+) scanf("%d", &ai); getchar(); if (ai = -1) /記錄結束位置,結束循環 y = i; break; printf("是否需要查找(Y/N):"); scanf("%c", &ch); while
6、(ch = 'y'|ch = 'Y') printf("請輸入要查找的數據:n"); scanf("%d", &x); getchar(); i = 0; /找到數組的結束位置。 while (i < y-1&&ai != x) /找到要查找的數據的位置 i+; if (i = -1) /沒找到 printf("對不起,沒有找到。n"); else printf("該數據在第%d個位置上。n", i+1); printf("是否繼續查找(Y/N
7、):"); scanf("%c", &ch); void binSearch() /二分查找 int bSEARCHMAX, i, y, x, low, mid, high, n; char ch; printf("建立遞增有序的查找順序表(以-1結束):n"); for (i = 0; i<SEARCHMAX; i+) scanf("%d", &bi); getchar(); if (bi = -1) /記錄結束位置,結束循環 y = i; break; printf("是否需要查找(Y/N
8、):"); scanf("%c", &ch); while (ch = 'y'|ch = 'Y') printf("請輸入要查找的數據:"); scanf("%d", &x); getchar(); low = 0; /低 high = y-1; /高 n = 0; /記錄次數 while (low <= high) mid = (low+high)/2; n+; if (bmid > x) /在左邊 high = mid-1; else if (bmid <
9、 x) /在右邊 low = mid+1; else /找到 break; if (low > high) printf("對不起,沒有找到該數據。n"); printf("共進行%d次比較。n", n); if (bmid < x) /查找最后小于該數據的位置 mid+; printf("可將此數據插入第個%d位置", mid+1); else printf("找到該數據在第%d個位置。n", mid+1); printf("共進行%d次比較。n", n); printf(&quo
10、t;是否需要查找(Y/N):"); scanf("%c", &ch); void btSearch() /二叉排序樹 int choice, x, l = 1; pBtNode T; printf("建立一棵二叉排序樹存儲n"); T = createBT(); getchar(); while (l) printf("n 二叉排序樹n"); printf("*n"); printf("* 1-更新二叉排序樹 *n"); printf("* 2-查 找 結 點 *n&
11、quot;); printf("* 3-插 入 結 點 *n"); printf("* 4-刪 除 結 點 *n"); printf("* 5-中序輸出排序樹 *n"); printf("* 0-返 回 *n"); printf("*n"); printf("請選擇菜單號(0-5):"); fflush(stdin); scanf("%d", &choice); switch(choice) case 1: T = createBT(); brea
12、k; case 2: printf("請輸入要查找的數據:"); scanf("%d", &x); getchar(); searchBT(T, x); break; case 3: printf("請輸入要插入的數據:"); scanf("%d", &x); insBT(&T, x); break; case 4: printf("請輸入要刪除的數據:"); scanf("%d", &x); delBT(&T, x); break;
13、case 5: inorderBT(T); break; case 0: l = 0; break; default: printf("輸入錯誤,請重新輸入。"); getchar(); l = 1; break; pBtNode createBT() /建立二叉樹 pBtNode T; /聲明指針 int x; T = NULL; printf("請輸入一個整數(輸入0結束):"); fflush(stdin); scanf("%d", &x); getchar(); while (x) /輸入的數據非零時 insBT(&a
14、mp;T, x); /二叉樹中插入數據 printf("請輸入下一個整數(輸入0結束):"); fflush(stdin); scanf("%d", &x); getchar(); return T; /返回指針void searchBT(pBtNode T, int k) /查找二叉樹結點 pBtNode f = T; while (f) if(f->trData = k) /判斷是否找到該數據 printf("已找到數據。n"); return; f = (k < f->trData )?f->lc
15、hild:f->rchild; /判斷下一個查找的位置 printf("沒有找到數據。n");void insBT(pBtNode *T, int k) /插入二叉樹結點 pBtNode f, p; p = (*T); /指向指針的指針 while (p) /當結點不為空 if (p->trData = k) printf("樹中已有%d,不需要插入。", k); return; else f = p; p = (k < p->trData)?p->lchild:p->rchild; /判斷插入的數據的位置 p = (
16、BtNode *)malloc(sizeof(BtNode); /分配空間 p->trData = k; p->lchild = p->rchild = NULL; if (*T) = NULL) (*T) = p; else if (k<f->trData) f->lchild = p; else f->rchild =p; void delBT(pBtNode *T, int k) /刪除二叉樹結點 pBtNode p, q, child, parent = NULL; p = *T; while (p) /找到輸入的數據的位置 if (p->
17、;trData = k) break; parent = p; /記錄上一個結點 p = (k < p->trData)?p->lchild:p->rchild; if (!p) /沒有找到位置 printf("沒有找到你要刪除的數據結點。n"); return; q = p; if (q->lchild&&q->rchild) for (parent = q, p = q->rchild; p->lchild; parent = p, p=p->lchild) ; child = (p->lchild)?p->lchild:p->rchild; /下一個指針的指向 if (!parent) *T = child; else if
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業自動化技術發展現狀
- 工業遺產改造為文化創意產業園的實踐
- 工作場所優化與管理創新
- 工業設計與產品創新策略探討
- 工作中的安全意識與防護技能
- 工程招標投標與合同管理
- 工作場合的手機使用禮儀
- 工廠布局規劃與優化方法
- 工廠機械設備的安全管理
- 市場分析與預測方法探討
- 計算物理面試題及答案
- JG/T 455-2014建筑門窗幕墻用鋼化玻璃
- 村文書考試題及答案
- 2025年中國鐵路西安局招聘高校畢業生第二批(102人)筆試參考題庫附帶答案詳解
- 創新創業策劃書格式
- 大數據在區域經濟學中的應用研究-洞察闡釋
- 浙江國企招聘2025杭州地鐵科技有限公司招聘51人(第一批)筆試參考題庫附帶答案詳解
- 北京市2025年第一次普通高中學業水平合格性考試地理試題(含答案)
- 人工智能導論智慧樹知到期末考試答案章節答案2024年哈爾濱工程大學
- 小學美術下冊課件---7.19--圓柱體的裝飾-滬教版-(共13張PPT)ppt課件
- GB∕T 40097-2021 能源路由器功能規范和技術要求
評論
0/150
提交評論