哈工大计算机软件基础实验报告范例Word文档下载推荐.docx
- 文档编号:21701070
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:19
- 大小:117.90KB
哈工大计算机软件基础实验报告范例Word文档下载推荐.docx
《哈工大计算机软件基础实验报告范例Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《哈工大计算机软件基础实验报告范例Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
voiddelet(intp)
intj;
if(p>
last-1||p<
0)
printf("
wrongposition!
\n"
);
for(j=p+1;
j<
=last-1;
j++)
node[j-1]=node[j];
last=last-1;
voidmodify(intp,intx)
node[p]=x;
voidinsert(intp,intx)
intm;
if(last==max)
thelistisfull!
for(m=last-1;
m>
=p;
m--)
node[m+1]=node[m];
last=last+1;
intmain()
inti,a,x,c,p,flag=0,r,s,u,v;
intfind(intx);
voidinsert(intp,intx);
voiddelet(intp);
voidmodify(intp,intx);
pleaseenternumber:
do
scanf("
%d"
&
a);
switch(a)
case1:
pleaseenterthex\n"
x);
c=find(x);
findresult=%d\n"
c);
break;
case2:
pleaseenterthedeletepotp\n"
p);
beforedelete\n"
for(i=0;
i<
i++)
%d"
node[i]);
delet(p);
afterdelete\n"
case3:
pleaseenterthepotrandthevalues\n"
%d%d"
r,&
s);
beforemodify\n"
modify(r,s);
aftermodify\n"
case4:
pleaseenterthepotpandthevaluex\n"
u,&
v);
beforeinsert\n"
insert(u,v);
afterinsert\n"
case5:
flag=1;
default:
inputerror\n"
}while(!
flag);
return(0);
二、实验过程
根据题目要求,写出顺序存储的线性表的建立,查找,插入,删除,修改各段的子程序,主函数由switchcase语句构成主菜单,再将各部分有机结合在一起,经过反复的运行调试,得到最终的程序。
三、实验分析
在线性表的建立时,我直接用数组赋给它初值;
在查找功能中要实现,当能找到时返回该值,找不到返回-1;
而修改功能则是在查找的基础上,将找到的值加以修改;
在插入功能中要实现,再找到指定节点的基础上,当线性表满时,不能插入,当线性表不满时,可以插入;
在删除功能重要实现,当线性表为空时或者删除位置不对时,都显示位置错误,不可删除,否则才可删除。
四、实验结论
1.查找
2.删除
3.修改
4.插入及退出
实验二二叉树的前序遍历程序的实现
stdlib.h>
intmax;
structnode
intdata;
structnode*llink;
structnode*rlink;
};
structnode*insertree(structnode*tree,intx)
structnode*r,*q;
if(tree==NULL)/*(树为空)*/
{
r=(structnode*)malloc(sizeof(structnode));
r->
data=x;
rlink=NULL;
llink=NULL;
tree=r;
}
else/*树不为空*/
r=tree;
while(r!
=NULL)
q=r;
/*q为r,即上个节点地址*/
if(x<
r->
data)
r=r->
llink;
else
rlink;
r=(structnode*)malloc(sizeof(structnode));
q->
q->
llink=r;
rlink=r;
returntree;
voidpreorder(structnode*t)
structnode*s[max];
inttop;
top=-1;
do
while(t!
printf("
%4d"
t->
data);
if(t->
rlink!
top++;
s[top]=t->
t=t->
if(top!
=-1)
t=s[top];
top--;
while((t!
=NULL)||(top!
=-1));
inti,x;
charchoice;
structnode*tree=NULL;
Pleaseinputthenumbersthatyouwanttohaveinyourtree:
"
scanf("
max);
for(i=1;
=max;
Pleaseinputanumber:
%d"
tree=insertree(tree,x);
ifyouwanttoorderthetree,pleaseiuput'
Y'
scanf("
%c"
choice);
if(choice=='
||choice=='
y'
)
preorder(tree);
return0;
先用递归算法建立一颗二叉树,当输入为#时,所对应的节点为空其余全都输入字母,然后再用非递归算法,前序遍历一颗二叉树:
即按照访问根节点,遍历左子树,遍历右子树的顺序,遍历这颗二叉树。
在二叉树的建立时,以所输入的字母为其数据项;
遍历时,打印相应的节点值。
实验三二叉排序树维护子系统实现
#include<
malloc.h>
#definemax9
inta[max];
intdata;
structnode*llink;
structnode*rlink;
}*shutree=NULL,*j,*o,*h;
voidpreorder(structnode*tree)
structnode*p;
structnode*s[max];
inttop;
top=-1;
p=tree;
while(p!
p->
if(p->
{
top=top+1;
s[top]=p->
}
p=p->
if(top!
p=s[top];
top=top-1;
}while(p!
=NULL||top!
=-1);
structnode*find(structnode*tree,intx)
intf;
structnode*p,*q;
f=0;
while((!
f)&
(p!
=NULL))
data==x)
f=1;
if(x<
p->
if(f)
q=p;
q=NULL;
return(q);
structnode*insertree(structnode*tree,intx)
if(tree==NULL)
p=(structnode*)malloc(sizeof(structnode));
p->
tree=p;
q->
llink=p;
rlink=p;
return(tree);
structnode*detree(structnode*t,structnode*f,structnode*p)
structnode*q,*s;
intbol;
bol=0;
if((p->
llink==NULL)||(p->
rlink==NULL))
llink==NULL)
if(p==t)
t=p->
s=p->
bol=1;
s=q->
while(s->
llink!
q=s;
s=s->
s->
llink=p->
if(q!
=p)
llink=s->
rlink=p->
t=s;
if(bol==1)
if(p==f->
llink)
f->
llink=s;
rlink=s;
free(p);
return(t);
intn,i,k,m,l,x,y,z;
intflag1=0;
structnode*find(structnode*tree,intx);
structnode*insertree(structnode*tree,intx);
structnode*detree(structnode*t,structnode*f,structnode*p);
voidpreorder(structnode*tree);
inputdata\n"
9;
a[i]);
请输入n\n"
1插入\n2删除\n3查找\n4替换\n5退出\n"
n);
switch(n)
shutree=insertree(shutree,a[i]);
插入后\n"
preorder(shutree);
输入你要删除的值\n"
k);
j=find(shutree,k);
输入你要删除结点的双亲值(无双亲输入0)\n"
l);
if(l==0)
h=NULL;
j=shutree;
h=find(shutree,l);
shutree=detree(shutree,h,j);
删除后\n"
输入你要查找的值\n"
m);
o=(structnode*)find(shutree,m);
if(o==NULL)
result=0\n"
resuct=1\n"
替换前\n"
将值为x(x的双亲为z)的结点替换为y\n"
%d%d%d"
x,&
z,&
y);
j=find(shutree,x);
if(z==0)
h=find(shutree,z);
shutree=insertree(shutree,y);
替换后\n"
flag1=1;
}while(flag1!
=1);
return0;
根据题目要求,写出二叉排序树插入,查找,删除,替换的程序段,主函数由switchcase语句构成主菜单,再将各部分有机结合在一起,经过反复的运行调试,得到最终的程序。
在建立一颗二叉排序树树时,反复调用插入函数知道整个二叉排序树建立好;
在查找时,要实现若找到返回1,没找到返回0;
在删除时,要充分考虑到被删除节点的各种情况:
是否有左子女,是否有右子女,是否有双亲;
在替换时,实质就是将一个节点删除,然后再插入一个新节点。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈工大 计算机软件 基础 实验 报告 范例