日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告

發(fā)布時間:2023/12/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《數據結構二叉排序樹實驗報告》由會員分享,可在線閱讀,更多相關《數據結構二叉排序樹實驗報告(7頁珍藏版)》請在裝配圖網上搜索。

1、實驗報告課程名:數據結構(C語言版)實驗名:二叉排序樹姓名: 班級: 學號: 撰寫時間:2014.12.18一 實驗目的與要求1. 掌握二叉排序樹上進行插入和刪除的操作2. 利用 C 語言實現該操作二 實驗內容 對于一個線形表, 利用不斷插入的方法, 建立起一株二叉排序樹 從該二叉排序樹中刪除一個葉子節(jié)點, 一個只有一個子樹的非葉子節(jié),一個有兩個子樹的非葉子節(jié)點。三 實驗結果與分析#include #include /二叉查找樹結點描述 typedef int KeyType; typedef struct Node KeyType key; /關鍵字 struct Node * left; 。

2、/左孩子指針 struct Node * right; /右孩子指針 struct Node * parent; /指向父節(jié)點指針 Node,*PNode; /往二叉查找樹中插入結點 /插入的話,可能要改變根結點的地址,所以傳的是二級指針 void inseart(PNode * root,KeyType key) /初始化插入結點 PNode p=(PNode)malloc(sizeof(Node); p-key=key; p-left=p-right=p-parent=NULL; /空樹時,直接作為根結點 if(*root)=NULL) *root=p; return; /插入到當前結點(。

3、*root)的左孩子 if(*root)-left = NULL & (*root)-key key) p-parent=(*root); (*root)-left=p; return; /插入到當前結點(*root)的右孩子 if(*root)-right = NULL & (*root)-key parent=(*root); (*root)-right=p; return; if(*root)-key key) inseart(&(*root)-left,key); else if(*root)-key right,key); else return; /查找元素,找到返回關鍵字的結點指。

4、針,沒找到返回NULL PNode search(PNode root,KeyType key) if(root = NULL) return NULL; if(key root-key) /查找右子樹 return search(root-right,key); else if(key key) /查找左子樹 return search(root-left,key); else return root; /查找最小關鍵字,空樹時返回NULL PNode searchMin(PNode root) if(root = NULL) return NULL; if(root-left = NULL。

5、) return root; else /一直往左孩子找,直到沒有左孩子的結點 return searchMin(root-left); /查找最大關鍵字,空樹時返回NULL PNode searchMax(PNode root) if(root = NULL) return NULL; if(root-right = NULL) return root; else /一直往右孩子找,直到沒有右孩子的結點 return searchMax(root-right); /查找某個結點的前驅 PNode searchPredecessor(PNode p) /空樹 if(p=NULL) return。

6、 p; /有左子樹、左子樹中最大的那個 if(p-left) return searchMax(p-left); /無左子樹,查找某個結點的右子樹遍歷完了 else if(p-parent = NULL) return NULL; /向上尋找前驅 while(p) if(p-parent-right = p) break; p=p-parent; return p-parent; /查找某個結點的后繼 PNode searchSuccessor(PNode p) /空樹 if(p=NULL) return p; /有右子樹、右子樹中最小的那個 if(p-right) return search。

7、Min(p-right); /無右子樹,查找某個結點的左子樹遍歷完了 else if(p-parent = NULL) return NULL; /向上尋找后繼 while(p) if(p-parent-left = p) break; p=p-parent; return p-parent; /根據關鍵字刪除某個結點,刪除成功返回1,否則返回0 /如果把根結點刪掉,那么要改變根結點的地址,所以傳二級指針 int deleteNode(PNode* root,KeyType key) PNode q; /查找到要刪除的結點 PNode p=search(*root,key); KeyType 。

8、temp; /暫存后繼結點的值 /沒查到此關鍵字 if(!p) return 0; /1.被刪結點是葉子結點,直接刪除 if(p-left = NULL & p-right = NULL) /只有一個元素,刪完之后變成一顆空樹 if(p-parent = NULL) free(p); (*root)=NULL; else /刪除的結點是父節(jié)點的左孩子 if(p-parent-left = p) p-parent-left=NULL; else /刪除的結點是父節(jié)點的右孩子 p-parent-right=NULL; free(p); /2.被刪結點只有左子樹 else if(p-left & !。

9、(p-right) p-left-parent=p-parent; /如果刪除是父結點,要改變父節(jié)點指針 if(p-parent = NULL) *root=p-left; /刪除的結點是父節(jié)點的左孩子 else if(p-parent-left = p) p-parent-left=p-left; else /刪除的結點是父節(jié)點的右孩子 p-parent-right=p-left; free(p); /3.被刪結點只有右孩子 else if(p-right & !(p-left) p-right-parent=p-parent; /如果刪除是父結點,要改變父節(jié)點指針 if(p-parent 。

10、= NULL) *root=p-right; /刪除的結點是父節(jié)點的左孩子 else if(p-parent-left = p) p-parent-left=p-right; else /刪除的結點是父節(jié)點的右孩子 p-parent-right=p-right; free(p); /4.被刪除的結點既有左孩子,又有右孩子 /該結點的后繼結點肯定無左子樹(參考上面查找后繼結點函數) /刪掉后繼結點,后繼結點的值代替該結點 else /找到要刪除結點的后繼 q=searchSuccessor(p); temp=q-key; /刪除后繼結點 deleteNode(root,q-key); p-key=temp; return 1; /創(chuàng)建一棵二叉查找樹 void create(PNode* root,KeyType *keyArray,int length) int i; /逐個結點插入二叉樹中 for(i=0;ikey); printf(%dn,searchSuccessor(root)-key); printf(%dn,searchMin(root)-key); printf(%dn,searchMax(root)-key); printf(%dn,search(root,13)-key); return 0; 圖1:二叉樹排序實驗結果。

總結

以上是生活随笔為你收集整理的数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。