数据结构Word文档格式.docx
《数据结构Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
stdio.h"
#include<
malloc.h>
typedefintdatatype;
#definemax60
typedefstructnode
{
chardata;
structnode*lchild,*rchild;
}bitree;
bitree*creat()
{
inti,j;
bitree*root,*s,*Q[max];
charch;
printf("
请输入要建立的树的下标和数值:
"
);
scanf("
%d%c"
&
i,&
ch);
while(i!
=0&
ch!
='
0'
)
{
s=(bitree*)malloc(sizeof(bitree));
s->
data=ch;
lchild=NULL;
rchild=NULL;
Q[i]=s;
if(i==1)root=s;
else
{
j=i/2;
if(i%2==0)Q[j]->
lchild=s;
elseQ[j]->
rchild=s;
}
scanf("
}
returnroot;
}
voidpreorder(bitree*t)
if(t)
printf("
%c"
t->
data);
preorder(t->
lchild);
rchild);
voidinorder(bitree*t)
inorder(t->
voidpostorder(bitree*t)
postorder(t->
inthigh(bitree*t)
intl,r;
if(t==NULL)return0;
else
l=high(t->
r=high(t->
return(l>
r?
l:
r)+1;
intnodes(bitree*a)
intnum1,num2;
if(a==NULL)return0;
num1=nodes(a->
num2=nodes(a->
returnnum1+num2+1;
intleafs(bitree*b)/
intn,m;
if(b==NULL)return0;
else
if(b->
lchild==NULL&
b->
rchild==NULL)return1;
n=leafs(b->
m=leafs(b->
returnn+m;
voidmain()
inta,j,h,g;
bitree*b;
b=creat();
while
(1)
选择1前序遍历\n选择2中序遍历\n选择3后序遍历\n选择4求高度\n选择5求总结点数\n选择6求叶子结点个数\n选择0退出:
"
scanf("
%d"
a);
switch(a)
case1:
printf("
该二叉树的前序遍历是:
preorder(b);
printf("
\n"
break;
case2:
该二叉树的中序遍历是:
inorder(b);
case3:
该二叉树的后序遍历是:
postorder(b);
case4:
该二叉树的高度j=%d\n"
j);
j=high(b);
case5:
h=nodes(b);
该二叉树的总结点数h=%d\n"
h);
case6:
g=leafs(b);
该二叉树的叶子结点个数g=%d\n"
g);
}
2.3运行结果
1.建立二叉树如下图:
2.前序遍历功能运行结果如下图:
3.中序遍历功能运行结果如下图:
4.后序遍历功能运行结果如下图:
5.求高度功能运行结果如下图:
6.求总结点数功能运行结果如下图:
7.求叶子结点个数功能运行结果如下图:
8.程序运行结束如下图:
结果分析
通过这个程序主要掌握三种遍历方法,包括前序遍历、中序遍历、后序遍历,以及怎么求二叉树的高度、总结点数、叶子总个数。
并会将理论与现实结合在一起。
⑵职工工作量统计
本题为了给职工工作量进行统计排序,使用了简单的选择排序法进行排序。
这种方法类似我们人为的排序习惯:
从数据中选择最小的同第一个值交换,在从省下的部分中选择最小的与第二个交换,这样往复下去。
课程设计流程图:
开始
|
设置一个空的链表,用于存储信息
用户输入,存储到链表
根据工作量排序
输出排序后的信息
结束
#include<
stdio.h>
#defineMAX100
structworkerinfo
intnumber;
intproducts;
intrank;
}workers[MAX];
intcount;
voidinput()
intn,i;
输入工号和产品数量(工号表示输入结束):
while(count<
MAX&
(scanf("
&
n),n))
for(i=0;
i<
count;
i++)
if(workers[i].number==n)
if(i==count)
workers[count++].number=n;
n);
workers[i].products+=n;
if(count==MAX)
职工人数已达上限!
voidsort()
inti,j,k;
structworkerinfot;
for(i=0;
k=i;
for(j=i+1;
j<
j++)
if(workers[j].products>
workers[k].products||
workers[j].products==workers[k].products&
workers[j].number<
workers[k].number)
k=j;
if(i!
=k)
t=workers[i];
workers[i]=workers[k];
workers[k]=t;
if(i==0||workers[i].products!
=workers[i-1].products)
workers[i].rank=i+1;
workers[i].rank=workers[i-1].rank;
voidoutput()
inti,j,c;
i=j)
for(c=i;
c<
count&
workers[c].rank==i+1;
c++);
第%d名的职工共有%d人:
i+1,c-i);
for(j=i;
c;
printf("
%d\n"
workers[j].number);
intmain()
input();
sort();
output();
return0;
(一)输入数据:
123
234
323
215
432
(二)输出显示:
2.4结果分析
本题应用结构数组处理职工工作量的信息,主要包括职工工号和完成的产品数量等信息,使用了选择排序算法按完成数量对他们进行排序,并确定他们的名次;
用文件实现职工工作量的管理;
第四章程序设计的总结
通过这次做数据结构的课程设计,我发现真正掌握一个知识点并不只是要从书上看,还要查一些相关资料,并且理论与现实结合在一起。
这次做的是关于二叉树的课程设计,刚开始以为并不是很难,但真正做的时候才发现这一节的知识点很多,也有一些比较混淆的难点,比如二叉树的遍历就有三种情况,包括前序遍历、中序遍历、后序遍历。
当然这次在做课程设计的时候遇到一些问题,不过得到大家的帮助,问题得到解决,也成功的完成了本次的课程设计。
五章参考文献
【1】严蔚敏,吴伟明.数据结构[M].2版.清华大学出版社,1992。
【2】唐策善,数据结构——用C语言描述.高等教育出版社。
【3】殷人昆.数据结构.北京:
清华大学出版社,2001。
K
【4】严蔚敏,吴伟民,数据结构习题集(C语言版).北京清华大学出版社,1999。