厦门理工 数据结构毕业课程设计报告2Word下载.docx
- 文档编号:20209221
- 上传时间:2023-01-19
- 格式:DOCX
- 页数:28
- 大小:167.73KB
厦门理工 数据结构毕业课程设计报告2Word下载.docx
《厦门理工 数据结构毕业课程设计报告2Word下载.docx》由会员分享,可在线阅读,更多相关《厦门理工 数据结构毕业课程设计报告2Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
如果两个结点一个出现在左子树中,一个出现在右子树中,那当前的结点就是最低的共同父结点否是否是是2.3.2调试过程及实验结果2.4题目:
二叉树的运算2任务:
请设计一个算法,把二叉树的叶子结点按从左到右的顺序连成一个单链表。
二叉树用二叉链存储,链接时用叶子结点的rchild域存放指针。
2.4.1算法描述及实验步骤voidinsert_data(intx)创建树;
voidleaflink(test*root)叶子节点连接;
2.4.2调试过程及实验结果三课程设计分析与总结课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础通过这次课程设计,对于数据结构有了更深的了解。
书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。
针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。
在这次设计过程中,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
四.源程序清单停车场:
#includestdio.h#includestdlib.h#includestring.h#includeconio.h#defineN100/*定义一个全局变量用来存储停车场的最大容量*/typedefstructtimeinthour;
intmin;
Time;
/*用于计算停车时间以便计算停车费用*/typedefstructnodecharcarnum10;
Timereach;
Timego;
Car;
/*车辆信息结点*/typedefstructNODECar*stack150;
inttop;
SqStack;
/*定义一个栈作为停车站*/typedefstructcarCar*data;
structcar*next;
QNode;
/*定义一个车结构*/typedefstructNodeQNode*front;
QNode*rear;
LinkQueue;
/*等待通道*/voidInitStack(SqStack*s)/*初始化栈*/inti;
s-top=0;
for(i=0;
istacks-top=NULL;
intInitQueue(LinkQueue*Q)/*初始化便道*/Q-front=(QNode*)malloc(sizeof(QNode);
if(Q-front!
=NULL)Q-front-next=NULL;
Q-rear=Q-front;
return
(1);
elsereturn(-1);
intarrive(SqStack*In,LinkQueue*W)/*车辆到达*/Car*p;
QNode*t;
p=(Car*)malloc(sizeof(Car);
flushall();
printf(ntt停车场还有%d个停车位,N-In-top);
printf(ntt请输入车牌号码:
);
gets(p-carnum);
if(In-toptop+;
printf(ntt停车的位置:
%d号停车位。
In-top);
printf(ntt请输入车到达的时间(格式“*:
*”):
scanf(%d:
%d,&
(p-reach.hour),&
(p-reach.min);
In-stackIn-top=p;
printf(tt请按任意键返回);
getch();
else/*停车场已满,车进便道*/printf(ntt停车位已满,该车须在便道等待!
t=(QNode*)malloc(sizeof(QNode);
t-data=p;
t-next=NULL;
W-rear-next=t;
W-rear=t;
voidPrint(Car*p,introom)/*输出停车站车的信息*/intA1,A2,B1,B2;
printf(ntt请输入车离开的时间(格式“*:
(p-go.hour),&
(p-go.min);
printf(ntt车牌号码:
puts(p-carnum);
printf(ntt车到达的时间是:
%d:
%d,p-reach.hour,p-reach.min);
printf(tt车离开的时间是:
%d,p-go.hour,p-go.min);
A1=p-reach.hour;
A2=p-reach.min;
B1=p-go.hour;
B2=p-go.min;
printf(ntt费用为:
%d元,(B1-A1)*60+(B2-A2);
free(p);
voidgo(SqStack*In,SqStack*Out,LinkQueue*W)/*车辆离开*/intlocate;
Car*p,*t;
QNode*q;
/*判断车场内是否有车*/if(In-top0)/*有车*/while
(1)/*输入离开车辆的信息*/printf(ntt请输入车在停车场的位置:
scanf(%d,&
locate);
if(locate=1&
locatetop)break;
while(In-toplocate)/*车辆离开*/Out-top+;
Out-stackOut-top=In-stackIn-top;
In-stackIn-top=NULL;
In-top-;
p=In-stackIn-top;
while(Out-top=1)In-top+;
In-stackIn-top=Out-stackOut-top;
Out-stackOut-top=NULL;
Out-top-;
Print(p,locate);
/*判断通道上是否有车及车站是否已满*/if(W-front!
=W-rear)&
In-topfront-next;
t=q-data;
In-top+;
printf(ntt便道的%s号车进入车场第%d号停车位。
t-carnum,In-top);
printf(ntt请输入现在的时间(格式“*:
(t-reach.hour),&
(t-reach.min);
W-front-next=q-next;
if(q=W-rear)W-rear=W-front;
In-stackIn-top=t;
free(q);
elseprintf(ntt停车场里没有车n);
/*没车*/printf(tt请按任意键返回);
voidinfo1(SqStack*S)/*列表输出车场信息*/inti;
if(S-top0)/*判断停车场内是否有车*/printf(n-查看车场:
printf(n位置到达时间车牌号n);
for(i=1;
itop;
i+)printf(%d,i);
printf(t%d:
%dt,S-stacki-reach.hour,S-stacki-reach.min);
puts(S-stacki-carnum);
elseprintf(ntt停车场里没有车);
voidinfo2(LinkQueue*W)/*显示便道信息*/QNode*p;
p=W-front-next;
if(W-front!
=W-rear)/*判断通道上是否有车*/printf(n便道中车辆的号码为:
n);
while(p!
=NULL)puts(p-data-carnum);
p=p-next;
elseprintf(n便道里没有车n);
printf(请按任意键返回);
voidinfo(SqStackS,LinkQueueW)info1(&
S);
/*显示停车场信息*/info2(&
W);
/*显示停便道信息*/voidmain()SqStackIn,Out;
LinkQueueWait;
inta;
InitStack(&
In);
Out);
InitQueue(&
Wait);
while
(1)printf(n*欢迎使用停车场管理系统*n);
printf(ntt该停车场的容量为150:
printf(ntt次停车场的停车费用为1.00元/分钟。
printf(n车辆停车);
printf(n车辆离开);
printf(n停车场信息);
printf(n退出系统n);
printf(ntt请选择相应操作);
while
(1)scanf(%d,&
a);
switch(a)case1:
arrive(&
In,&
break;
case2:
go(&
Out,&
case3:
info(In,Wait);
case4:
printf(tt谢谢使用!
欢迎下次光临!
exit(0);
default:
printf(ntt按键无效,请重新按键选择!
printf(n*欢迎使用停车场管理系统*n);
printf(n退出系统n);
字符串操作:
#include#include#includetypedefstructchar*ch;
intMaxsize;
intlength;
Sstring;
voidInitString(Sstring*S,intmax,char*string)inti;
S-ch=(char*)malloc(max*sizeof(char);
S-Maxsize=max;
S-length=strlen(string);
ilength;
i+)S-chi=stringi;
intInsert(Sstring*S,intpos,SstringT)inti;
if(posch所指数组空间,原数组元素存放在新数组的前面if(S-length+T.lengthS-Maxsize)realloc(S-ch,(S-length+T.length)*sizeof(char);
S-Maxsize=S-length+T.length;
for(i=S-length-1;
i=pos;
i-)S-chi+T.length=S-chi;
/依次后移T.length个位置for(i=0;
ichpos+i=T.chi;
/插入字串S-length=S-length+T.length;
/改变S的数据元素个数return1;
/取主串S从pos位置开始的长度为len的字串,取成功返回1,失败返回0intSubString(Sstring*T,SstringS,intpos,intlen)inti;
if(pos0|lenS.length)printf(参数pos和len出错!
return0;
if(lenT-Maxsize)T-ch=(char*)malloc(len*sizeof(char);
T-Maxsize=len;
ichi=S.chpos+i;
T-length=len;
return1;
voidDestroy(Sstring*S)free(S-ch);
S-Maxsize=0;
S-length=0;
voidIndex(SstringS,SstringT,intpos)inti=pos,j=0,v;
intm;
while(iS.length&
jT.length)if(S.chi=T.chj)i+;
j+;
elsei=i-j+1;
j=0;
if(j=T.length)v=i-T.length;
printf(串String3在String1中的%d位置,v);
elseprintf(串String3在String1中不存在!
printf(请输入插入位置m:
m);
Insert(&
S,m,T);
iS.length;
i+)printf(%c,S.chi);
printf(n);
voidmain()SstringS1,S2,S3,S4;
inti;
intj;
intn;
intmax1=25,max2=10,max3=20,max4=5;
InitString(&
S1,max1,structAreBox);
S2,max2,VertexType);
S3,max3,Data);
S4,max4,);
printf(*n);
printf(*1.输入字符串string1*n);
printf(*2.输入字符串string2*n);
printf(*3.输入字符串string3*n);
printf(*4.串String2的头n个字符添加到String1的尾部,输出结果*n);
printf(*5.查找sring3在string1的位置*n);
/输入第一个字符串printf(n请输入串S1:
iS1.length;
i+)printf(%c,S1.chi);
/输入第二个字符串printf(n请输入串S2:
iS2.length;
i+)printf(%c,S2.chi);
/输入第三个字符串printf(n请输入串S3:
iS3.length;
i+)printf(%c,S3.chi);
/将字符串2的头n个字符添加到S1尾部if(nS2.length)printf(请输入n的值:
SubString(&
S4,S2,0,n);
S1,S1.length,S4);
elseprintf(输入不正确);
/查找String3在串String1中的位置,若String3在String1中不存在,则插入String3在String1中的m位置上。
Index(S1,S3,0);
Destroy(&
S4);
找祖先:
#include#include#include#definemax100typedefstructnodeintdata;
/元素数据structnode*lchild;
/指向左孩子structnode*rchild;
/指向右孩子BTNode;
BTNode*root;
intamax,cmax,leaf1,leaf2,len1,len2;
voidinsert_data(intx)/*生成二叉排序树*/BTNode*p,*q,*s;
s=(BTNode*)malloc(sizeof(BTNode);
s-data=x;
s-lchild=NULL;
s-rchild=NULL;
if(!
root)root=s;
p=root;
while(p)/*如何接入二叉排序树的适当位置*/q=p;
if(p-data=x)/printf(dataalreadyexist!
return;
elseif(xdata)p=p-lchild;
elsep=p-rchild;
if(xdata)q-lchild=s;
elseq-rchild=s;
voiditemPath(BTNode*b,intpath,intleaf,int*len,intpathlen)/求出根节点到指定结点的路径inti;
if(b!
=NULL)if(b-data=leaf)printf(%d到根节点的路径为:
%d,b-data,b-data);
a0=leaf1;
for(i=pathlen-1;
i=0;
i-)printf(%d,pathi);
apathlen-i=pathi;
*len=pathlen;
elsepathpathlen=b-data;
/将数据放入路径中pathlen+;
/路径增长一itemPath(b-lchild,path,leaf,len,pathlen);
itemPath(b-rchild,path,leaf,len,pathlen);
pathlen-;
/恢复原态voidfindParent()intparent,flag=0;
for(inti=1;
i=len1;
i+)for(intj=1;
j=len2;
j+)if(ai=aj)parent=ai;
printf(%d是%d和%d的最近祖先!
n,parent,leaf1,leaf2);
flag=1;
if(flag)break;
intmain()inti,x,l1,l2;
printf(=找祖先=n);
intpath1100,path2100;
i=1;
root=NULL;
/*千万别忘了赋初值给root!
*/doprintf(请输入第%d个数:
i);
i+;
x);
/*从键盘采集数据,以-9999表示输入结束*/if(x=-9999)/printf(nNowoutputdatavalue:
elseinsert_data(x);
/*调用插入数据元素的函数*/while(x!
=-9999);
printf(请输入两个要找的节点:
scanf(%d%d,&
leaf1,&
leaf2);
l1=leaf1;
l2=leaf2;
itemPath(root,path1,l1,&
len1,0);
itemPath(root,path2,l2,&
len2,0);
findParent();
二叉树运算二:
#include#includetypedefstructlnodeintdata;
structlnode*lchild,*rchild;
test;
test*root,*k,*n;
voidinsert_data(intx)test*p,*q,*s;
s=(test*)malloc(sizeof(test);
while(p)q=p;
if(p-data=x)printf(dataalreadyexist!
voidleaflink(test*root)if(!
root)return;
if(root-lchild=NULL&
root-rchild=NULL)if(k=NULL)k=n=root;
elsen-rchild=root;
n=n-rchild;
if(root-lchild)leaflink(root-lchild);
if(root-rchild)leaflink(root-rchild);
retu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 厦门理工 数据结构毕业课程设计报告2 厦门 理工 数据结构 毕业 课程设计 报告