数据结构课程设计二叉排序树的实现Word文档格式.docx
- 文档编号:20618003
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:9
- 大小:50.17KB
数据结构课程设计二叉排序树的实现Word文档格式.docx
《数据结构课程设计二叉排序树的实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计二叉排序树的实现Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
3)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);
否则输出信息“无x”。
(一)问题分析和任务定义
对问题的描述应避开具体的算法和涉及的数据结构,它是对要完成的任务作出明确的回答,强调的是做什么,而不是怎么做。
(二)详细的设计和编码
算法的具体描述和代码的书写。
(三)上机调试
源程序的输入和代码的调试。
要求:
设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,深刻理解、牢固的掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。
四、源代码
1、用二叉链表存储结构实现
#include<
iostream>
usingnamespacestd;
typedefintKeyType;
typedefstructNode{
KeyTypekey;
structNode*lchild,*rchild;
}BSTNode,*BSTree;
voidInsertBST(BSTree*bst,KeyTypekey){
BSTrees;
if(*bst==NULL)/*递归结束条件*/
{
s=newBSTNode;
s->
key=key;
lchild=NULL;
rchild=NULL;
*bst=s;
}
else
if(key<
(*bst)->
key)
InsertBST(&
((*bst)->
lchild),key);
/*将s插入左子树*/
else
if(key>
InsertBST(&
rchild),key);
/*将s插入右子树*/
}
voidCreateBST(BSTree*bst){
KeyTypekey;
*bst=NULL;
scanf("
%d"
&
key);
while(key!
=0)
InsertBST(bst,key);
scanf("
voidInOrder(BSTreeroot){
if(root!
=NULL)
InOrder(root->
lchild);
printf("
%d"
root->
rchild);
BSTNode*DelBST(BSTreeT,KeyTypex){
BSTNode*p,*f,*s,*q;
p=T;
f=NULL;
while(p)/*查找关键字为x的待删结点p*/
{
if(p->
key==x)break;
f=p;
/*f指向p结点的双亲结点*/
key>
x)
p=p->
lchild;
rchild;
}
if(p==NULL)returnT;
/*若找不到,返回原来的二叉排序树*/
if(p->
lchild==NULL)/*p无左子树*/
if(f==NULL)
T=p->
if(f->
lchild==p)
f->
lchild=p->
rchild;
else
rchild=p->
deletep;
else/*p有左子树*/
q=p;
s=p->
while(s->
rchild)/*在p的左子树中查找最右下结点*/
{
q=s;
s=s->
}
if(q==p)
q->
lchild=s->
lchild;
/*将s的左子树链到q上*/
rchild=s->
p->
key=s->
key;
deletes;
returnT;
}
voidmain(){
BSTreeT;
intx;
BSTreeresult;
printf("
建立二叉排序树,请输入序列L:
\n"
);
CreateBST(&
T);
中序遍历输出序列为:
"
InOrder(T);
cin>
>
x;
result=DelBST(T,x);
if(result!
=NULL){
InOrder(result);
else
无x\n"
2、用顺序存储结构实现
#include<
structNode*next;
}BSTNode,*BSTree;
intA[40]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
intj,i=0;
voidInsertBST(intA[],KeyTypekey){
intj=0;
while(A[j]!
=-1){
if(key<
A[j])
j=2*j+1;
j=2*j+2;
A[j]=key;
voidCreateBST(intA[]){
intkey;
while(key!
=-1)
InsertBST(A,key);
voidTraverse(intA[],inti){
if(A[i]!
=-1){
Traverse(A,2*i+1);
cout<
<
A[i]<
'
\t'
;
Traverse(A,2*i+2);
voidDelBST(intA[],KeyTypex){
for(i=0;
i<
40;
i++)
if(A[i]==x)
A[i]=-1;
//intkey;
CreateBST(A);
Traverse(A,0);
DelBST(A,x);
删除x后中序遍历输出序列为:
无X\n"
五、测试分析
程序运行:
1、用二叉链表存储结构实现:
2、用顺序存储结构实现:
六、总结与体会
通过一周的课程设计,对计算机的应用,数据结构的作用以及C++的使用都有了更深的了解。
在理论学习和上机实践的各个环节中,通过自主学习和请教老师,我收获了不少。
当然也遇到不少的问题,也正是因为这些问题引发的思考给我带了收获。
从当初不喜欢上机写程序到现在能主动写程序,从当初拿着程序不知如何下手到现在知道如何分析问题,如何用专业知识解决实际问题的转变,我发现无论是专业知识还是动手能力,自己都有很大程度的提高。
在这段时间里,我遇到过的问题主要就是C语言和C++语言有些混淆,一些用法记不太清楚。
在老师的指导帮助下,同学们课余时间的讨论中,这些问题都一一得到了解决。
在程序的调试能力上,无形中得到了许多的提高。
例如:
头文件的使用,变量和数组的范围问题,定义变量时出现的问题等等。
在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 二叉排序树 实现