停车场管理设计Word格式.docx
《停车场管理设计Word格式.docx》由会员分享,可在线阅读,更多相关《停车场管理设计Word格式.docx(21页珍藏版)》请在冰点文库上搜索。
}
(2).链队列的初始化:
intInitQueue(LinkQueueCar*Q)//构造一个空队列
{link*p;
p=newlink;
p->
next=NULL;
Q->
rear=Q->
head=p;
ReturnQ;
(3).车辆到达时的算法:
intArrival(SeqStackCar*Enter,LinkQueueCar*W)
{CarNode*p;
//p为指向车场栈顶的指针
QueueNode*t;
//t为指向便道的指针
p=(CarNode*)malloc(sizeof(CarNode));
//分配存储空间
if(Enter->
top>
MAX)
{Enter->
top++;
Enter->
stack[Enter->
top]=p;
//p指针后移
Return
(1);
Else//车进入便道
{t=(QueueNode*)malloc(sizeof(QueueNode));
//分配存储空间
t->
data=p;
W->
rear->
next=t;
rear=t;
return
(1);
}
(4).输出停车场中的车辆编号和到达时间的算法:
voidList1(SeqStackCar*S)/*列表显示车场信息*/
{inti=S.top;
//出栈
cout<
<
”停车场中的车辆编号和到达时间”<
end1;
While(i!
=0)
{cout<
S.SeqStackCar[i].num<
””<
S.SeqStackCar[i].arrivetime<
i--;
cout<
(6).输出便道中车辆编号和到达时间的算法:
voidList2(LinkQueueCar*W)/*列表显示便道信息*/
{QueueNode*p;
p=W->
head->
next;
//指针p后移
if(W->
head!
=W->
rear)/*判断通道上是否有车*/
”便道中等待车辆的号码”<
while(p!
=NULL)判断队列是否为空
{cout<
data.num<
p=p->
3.函数的调用关系图
4.调试分析本程序中:
1.调试中遇到的问题及对问题的解决方法:
(1)在函数调用时,实参和形参在位置和个数上不是一一对应的,解决的方法是删除被调函数PRINT()中的形参room.
(2)在编程过程中出现括号不匹配的情况,检查是应使对应括号匹配。
2.车辆到达,离去时的时间复杂度均为:
O(n)。
本程序空间复杂度为:
O(n*n)。
5.测试结果
(1).输入车牌号及车辆到达信息:
(2)输出到达车辆的位置及离去车辆在停车场中停留的时间和应交的费用:
6.源程序(带注释)
#include"
stdio.h"
stdlib.h"
string.h"
#defineMAX3/*车库容量*/
#defineprice0.05/*每车每分钟费用*/
/*时间结点*/
/*车辆信息结点*/
/*模拟车站*/
}LinkQueueCar;
/*模拟通道*/
voidInitStack(SeqStackCar*);
/*初始化栈*/
intInitQueue(LinkQueueCar*);
/*初始化便道*/
intArrival(SeqStackCar*,LinkQueueCar*);
/*车辆到达*/
voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);
/*车辆离开*/
voidList(SeqStackCar,LinkQueueCar);
/*显示存车信息*/
voidmain()
{
SeqStackCarEnter,Temp;
LinkQueueCarWait;
intch;
InitStack(&
Enter);
/*初始化车站*/
Temp);
/*初始化让路的临时栈*/
InitQueue(&
Wait);
/*初始化通道*/
while
(1)
{printf("
\n1.thecararrive"
);
printf("
2.thecarleave"
3.theschedule"
4.out\n"
{scanf("
%d"
&
ch);
if(ch>
=1&
&
ch<
=4)break;
elseprintf("
\npleasechoose:
1|2|3|4."
switch(ch)
{case1:
Arrival(&
Enter,&
break;
case2:
Leave(&
Temp,&
case3:
List(Enter,Wait);
/*列表打印信息*/
case4:
exit(0);
/*退出主程序*/
default:
voidInitStack(SeqStackCar*s)/*初始化栈*/
{inti;
s->
top=0;
for(i=0;
i<
=MAX;
i++)
stack[s->
top]=NULL;
intInitQueue(LinkQueueCar*Q)/*初始化便道*/
{Q->
head;
voidPRINT(CarNode*p)/*打印出栈车的信息*/
{introom;
intA1,A2,B1,B2;
\npleaseinputthedeparttime:
"
scanf("
%d%d"
(p->
leave.hour),&
leave.min));
\nthenumberofthecar:
"
puts(p->
num);
\nthetimethecararrive:
%d:
p->
reach.hour,p->
reach.min);
thedeparttime:
leave.hour,p->
leave.min);
A1=p->
reach.hour;
A2=p->
reach.min;
B1=p->
leave.hour;
B2=p->
leave.min;
\nthefee:
%2.1fyuan"
((B1-A1)*60+(B2-A2))*price);
free(p);
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/
flushall();
\ninputthenumberofthecar:
gets(p->
top<
MAX)/*车场未满,车进车场*/
{Enter->
/*printf("
\ntheplaceofthecar:
Enter->
top);
*/
reach.hour),&
reach.min));
else/*车场已满,车进便道*/
\ngaichexuzaibiandaodengdai!
t=(QueueNode*)malloc(sizeof(QueueNode));
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)
{/*车辆离开*/
inti,room;
CarNode*p,*t;
QueueNode*q;
/*判断车场内是否有车*/
if(Enter->
0)/*有车*/
{while
(1)/*输入离开车辆的信息*/
\nqingshuruchezaichechangdeweizhi/1--%d/:
room);
if(room>
room<
=Enter->
top)break;
while(Enter->
room)/*车辆离开*/
{Temp->
Temp->
stack[Temp->
top]=Enter->
top];
top--;
p=Enter->
while(Temp->
=1)
top]=Temp->
PRINT(p);
/*判断通道上是否有车及车站是否已满*/
if((W->
rear)&
Enter->
MAX)/*便道的车辆进入车场*/
{q=W->
t=q->
data;
\nbiandaode%shaochejinruchechangdi%dweizhi"
t->
num,Enter->
/*printf("
\nqingshuruxianzaideshijian:
(t->
next=q->
if(q==W->
rear)
rear=W->
top]=t;
free(q);
]nbiandaolimeiyouche.\n"
chechanglimeiyouche."
/*没车*/
voidList1(SeqStackCar*S)/*列表显示车场信息*/
{inti;
if(S->
0)/*判断车站内是否有车*/
\nchechang:
\nweizhidaodashijianchepaihao\n"
for(i=1;
=S->
top;
i);
S->
stack[i]->
reach.hour,S->
puts(S->
\nchechanglimeiyouche"
voidList2(LinkQueueCar*W)/*列表显示便道信息*/
\ndengdaicheliandehaomawei:
=NULL)
{puts(p->
data->
\nbiandaolimeiyouche."
voidList(SeqStackCarS,LinkQueueCarW)
{intflag,tag;
flag=1;
while(flag)
\nqingxuanze1|2|3:
\n1.chechang\n2.biandao\n3.fanhui\n"
tag);
if(tag>
=1||tag<
=3)break;
switch(tag)
List1(&
S);
/*列表显示车场信息*/
List2(&
W);
/*列表显示便道信息*/
flag=0;
总结
在这三周的数据结构课程设计中,我的题目是:
停车场管理,这三周课程设计中,通过该题目的设计过程,我加深了对数据结构中线性表及栈的逻辑结构,存储结构的理解,掌握了线性表及栈上基本运算的实现,进一步理解和掌握了课本中所学的各种数据结构,同时也加深了对C语言中知识的理解。
学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。
一个人要完成所有的工作是非常困难和耗时的。
在以后的学习中我会更加注意各个方面的能力的协调发展。
在课程设计时遇到了很多的问题,在老师和同学的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。
三周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,三周中我收益很大,学到很多。
附件Ⅰ部分源程序代码
归并排序算法:
ProcedureMerge_Sort(a,c,NUM)
n<
-1
whilen<
NUMdo
callMerge_Pass(a,c,n,NUM)//以2*n间隔排序
-n*2
callMerge_Pass(c,a,n,NUM)
end
ProcedureMerge_Pass(a,c,n,NUM)
fori<
-0toNUM-2*nby2*ndo
callMerge(a+I,n,a+i+n,n,c+i)
end
ifi+n<
NUMthen
callMerge(a+i,n,a+i+n,n,c+i)
else
forj<
-ItoNUM-1doc(j)<
-a(j)
end
ProcedureMerge(a,m,b,n,c)
i<
-0;
j<
k<
-0
whilei<
mANDj<
n
ifa(i)<
=b(j)then
c(k)<
-b(j)
-k+1
j<
-j+1
ifi<
mthen//把剩余的a[]加到c[]中
mdo
c(k)<
-a(i)
-k+1
-i+1
else//把剩余的b[]加到c[]中
whilei<
ndo
c(k)<
-b(i)
归并程序如下:
voidMerge(inta[],intm,intb[],intn,intc[])
{inti=0,j=0,k=0;
while(i<
m&
n)//依序找最小的值加入空数据集合
if(a[i]<
=b[j])
c[k++]=a[i++];
c[k++]=b[j++];
if(i<
m)//把剩夏的值加入数据集合中
while(i<
m)
while(j<
n)
voidMerge_Pass(inta[],intc[],intn,intNUM)
{inti,j;
=NUM-2*n;
i+=2*n)//以2*n间隔排序
Merge(a+i,n,a+i+n,n,c+i);
if(i+n<
NUM)
Merge(a+i,n,a+i+n,NUM-(i+n)-1,c+i);
//把剩下的进行合并处理
for(j=i;
NUM;
j++)
c[j]=a[j];
voidMerge_Sort(inta[],intc[],intNUM)
{intn=1;
while(n<
{Merge_Pass(a,c,n,NUM);
//排序后加到c
n*=2;
Merge_Pass(c,a,n,NUM);
//排序后加到a
voidmain()//主函数
{inta[9]={82,16,9,95,37,75,42,69,34,},b[9],i;
Merge_Sort(a,b,11);
9;
a[i]);
程序运行结果如下: