-
大小: 46KB文件類型: .zip金幣: 2下載: 0 次發布日期: 2021-05-26
- 語言: C/C++
- 標簽:
資源簡介
[數據結構課程設計——C語言描述(第2版)][阮宏一,宋婉娟][程序源代碼].zip

代碼片段和文件信息
//?進行二叉排序樹和文件操作的主程序文件?bst_and_file.c
#include“bst_and_file.h“??//二叉排序樹的頭文件
//0.??初始化二叉排序樹,即把樹根指針置空
PBinTree?InitBSTree(?)
{??
return?NULL;
}
//1.?串比較函數
static?int?operator_equal(const?ElemType?*x1?const?ElemType?*x2)?
{
????//?元素相等比較?==
????return?strcmp(x1->num?x2->num)==0;
}
static?int?operator_small(const?ElemType?*x1?const?ElemType?*x2)?
{
????//元素小于比較?<
?? return?strcmp(x1->num?x2->num)<0;
}
//2.?判斷二叉排序樹是否為空
int?BSTreeEmpty(PBinTree?BST)
{
?????return?BST==NULL;
}
//3.?在二叉排序樹中查找元素
int?Find(PBinTree?BST?ElemType?*item)
{
?????if(BST==NULL)?
?return?0;??
?????else?
?{
?????????if(operator_equal(item&BST->data))?
?{?
?????????????item=&BST->data;?
?printf(“?????查找值為:??%s???%d\n“BST->data.numBST->data.grade);//輸出查找到的值
?return?1;
?}
?????????else?
?{ if(operator_small(item&BST->data))???????????????????//遞歸排序左子樹
??????????????????return?Find(BST->left?item);??
else??????????????????????????????????????????????????//遞歸排序右子樹
??????????????????return?Find(BST->right?item);
?}
?????}
}
//4.?更新二叉排序樹中的結點值
int?Update(PBinTree?BST?ElemType?*item)
{
?????if(BST==NULL)?
return?0;
?????else?
?{
???????if(operator_equal(item&BST->data))?
???{
???????????BST->data=*item;?return?1;
???}
???????else?if(operator_small(item&BST->data))
???????????????return?Update(BST->left?item);
???????else
???????????????return?Update(BST->right?item);
?}
}
//5.?向二叉排序樹中插入元素
void?Insert(PBinTree?*BST?const?ElemType?*item)
{
?????if(*BST==NULL)?
?????{?
?????????struct?BSTNode?*p=(struct?BSTNode?*)malloc(sizeof(struct?BSTNode));
?????????p->data=*item;?
?????????p->left=p->right=NULL;
?????????*BST=p;
?}
?????else?
?{??if(operator_small(item&(*BST)->data))
????????????Insert(&(*BST)->left?item);??//向左子樹中插入元素
????????else
????????????Insert(&(*BST)->right?item);?//向右子樹中插入元素
?}
}
//6.?從二叉排序樹中刪除元素
int?Delete(PBinTree?BST?const?ElemType?*item)
{????
??//從二叉排序樹中查找值為item的待刪結點,指針t指向待比較的結點,
??//指針s指向t的雙親結點,從樹根結點開始比較。
?????PBinTree?t=BST?s=NULL;
?????while(t!=NULL)?
?{
??????????if(operator_equal(item&t->data))?
??break;
??????????else
??{ if(operator_small(item&t->data))?
{ s=t;?
t=t->left;
}
else?
{
s=t;?
t=t->right;
}
??}
?}//endwhile
????
if(t==NULL)?return?0;??//若沒有找到待刪除的結點,則返回假
??
//分三種不同情況刪除已查找到的t結點且保證二叉排序樹的有序性不變
????
if(t->left==NULL?&&?t->right==NULL)?
????{???//對t結點(即待刪除的結點)為葉子結點的情況進行處理
????????if(t==BST)?
BST=NULL;
????????else?
{ if(t==s->left)?
s->left=NULL;
else?
s->right=NULL;
}
????????free(t);//
????}
????else?
{ if(t->left==NULL?||?t->right==NULL)
{ //對t結點為單分支結點的情況進行處理
if(t==BST)?
{??//刪除樹根結點
if(t->left==NULL)?
BST=t->right;
else?
BST=t->left;
}
else?
{?//刪除非樹根結點時,分四種情況進行處理
if(t==s->left?&&?t->left!=NULL)?
s->left=t->left;
else?
if(t==s->left?&&?t->right!=NULL)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????11466??2016-06-20?15:34??bst_and_file.c
?????文件????????1183??2016-06-18?22:43??bst_and_file.h
?????文件????????9113??2016-08-21?19:21??串基本操作演示.c
?????文件????????6846??2010-12-05?11:14??二叉樹的基本操作.c
?????文件????????4631??2016-06-11?20:35??哈夫曼編碼.c
?????文件????????9100??2016-08-04?15:36??學生通訊錄管理系統.c
?????文件???????12312??2010-07-11?16:34??廣義表.c
?????文件????????3127??2010-07-11?15:13??文學研究助手.c
?????文件???????22184??2016-07-31?20:36??校園導游系統2016.c
?????文件???????11583??2010-07-03?14:13??模擬動態存儲管理設計.c
?????文件????????9736??2016-08-22?12:07??稀疏矩陣運算器.c
?????文件???????10053??2016-08-22?16:49??航班信息查詢與檢索.c
?????文件???????22556??2016-08-20?20:43??航空客運訂票系統.c
?????文件????????3928??2016-08-20?18:36??表達式求值.c
?????文件???????12792??2016-08-02?18:45??銀行排隊系統.c
- 上一篇:光流場計算 c語言 源碼 optical flow
- 下一篇:學生信息管理系統 數組
評論
共有 條評論