栈和队列的应用的实验报告Word文档下载推荐.docx
- 文档编号:15228782
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:21
- 大小:22.55KB
栈和队列的应用的实验报告Word文档下载推荐.docx
《栈和队列的应用的实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《栈和队列的应用的实验报告Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
/'
D'
车牌号,到达时间/离开时间
E---退出。
A,2120,6<
回车>
第2120号车停在停车场的第1号车位上
Pressanykeytocontinue...<
A,8761,11<
StackOverflow!
第8761号车停在便道的第1号车位上
Pressanykeytocontinue...
车牌号,到达时间/离开时间
A,2110,7<
第2110号车停在停车场的第2号车位上
<
A,4153,8<
第4153号车停在停车场的第3号车位上
A,5154<
第5354号车停在停车场的第4号车位上
2.分析程序(注:
该程序的Delive函数有错误,已将更改后的程序覆盖到原程序上)
#defineN4/*声明停车场n为4*/#defineM5/*收费单价*/#defineTrue1
#defineFalse0
#defineNull0
#include<
stdio.h>
stdlib.h>
conio.h>
typedefstructelement{
intnum;
intarrtime;
/*定义到达时间*/}ElemType;
/*ElemType代表一个新类型名,代表上面指定的一个结构体类型。
这是就可以用ElemType定义变量*/
typedefstructstacktag{
ElemTypestack[N];
inttop;
}STACK;
/*STACK代表一个新类型名,代表上面指定的一个结构体类型。
这是就可以用STACK定义变量*/
typedefstructnodetag{
structnodetag*next;
}QUEUE;
/*QUEUE代表一个新类型名,代表上面指定的一个结构体类型。
这是就可以用QUEUE定义变量*/
typedefstructqueuetag{
QUEUE*front,*rear;
/“定义队头指针*front,队尾指针*rear”/
}LinkedQueTp;
/*LinkedQueTp代表一个新类型名,代表上面指定的一个结构体类型。
这是就可以用LinkedQueTp定义变量*/
voidIniStack(STACK*s);
/*定义STACK*s表示s为指向STACK结构体类型数据的指针,初始化栈*/
intPush(STACK*s,ElemTypex);
ElemTypePop(STACK*s);
/*初始化队列*/voidIniLinkedQue(LinkedQueTp*s);
voidEnLinkedQue(LinkedQueTp*s,intnum1);
intDeLinkedQue(LinkedQueTp*s);
/*删除队列*/voidArrive(STACK*s1,LinkedQueTp*p,ElemTypex);
/*到达*/
/*离开*/voidDelive(STACK*s1,STACK*s2,LinkedQueTp*p,ElemTypex);
voidIniStack(STACK*s)/*初始化栈*/{
s->
top=-1;
/*定义为空栈*/
return;
}
intPush(STACK*s,ElemTypex)问:
/*压栈函数(完成进栈操作,,)*/
{
if(s->
top==N-1)/*判断队是否为满*/
printf("
\nStackOverflow!
\n"
);
return(False);
}/*返回“错误”,即返回“0”
值*/
else{
top++;
/*指针s后移*/
stack[s->
top]=x;
/*把s->
top中的值赋给stack[],并把数据域
的值定为x*/
return(True);
}
}/*InitializeStack*/
ElemTypePop(STACK*s)/*弹栈函数*/
ElemTypex;
inti;
top<
0){问题:
/*判断栈是否为空,*/
x.num=Null;
x.arrtime=Null;
/*不计入车辆入栈时间*/
return(x);
top--;
/*指针从栈顶下移(后进先出)*/
i=s->
top+1;
/*用i记录移动前指针s的位置*/
x=s->
stack[i];
/*将该位置的数据给x(完成出栈,即所谓的删除车辆工作)*/
returnx;
}/*Pop*/
voidIniLinkedQue(LinkedQueTp*s){
QUEUE*p1;
>
front=(QUEUE*)malloc(sizeof(QUEUE));
/*为s指针开辟一个新结点*/s-
rear=s->
front;
p1=s->
/*p1指向栈顶*/
next=Null;
/*头结点指针域初始化(定义为空栈)*/p1-
p1->
num=0;
/*头结点数据域初始化*/}/*IniLinkedQue*/
voidEnLinkedQue(LinkedQueTp*s,intnum1)/*数据入队列(链接式循环队列)*/
{QUEUE*p,*p1;
p=(QUEUE*)malloc(sizeof(QUEUE));
/*产生一个新节点*/
p->
num=num1;
/*加入数据*/
/*下一个为零*/
rear;
/*加入队尾*/(在这里我觉得p1可以删除。
等同于s->
rear->
next=p,即结构体指针s中rear成员的指针域等于p,为尾插法,)
next=p;
/*加入*/
rear=p;
/将p指针移动到s->
rear,完成尾插/
num++;
/*修改保存在头结点数据域中的车辆数*/}
/*EnLinkedQue*/
intDeLinkedQue(LinkedQueTp*s){/*数据节点出队列*/
QUEUE*p;
intn;
front==s->
rear)return(Null);
/*若队列为空,则返回空*/
p=s->
front->
next;
/*p是第1个节点*/
next=p->
/*将p指针指向的节点中的数据取出*/
if(p->
next==Null)/*若仅有一个节点,则直接删除*/
n=p->
num;
/*存储取出的数据,即头指针和尾指针画在一个节点里,表示此时链队列为空*/
free(p);
/*释放单元*/
num--;
/*队列个数减一*/
return(n);
}/*返回取出的数据,即车牌号*/}/*DeLinkedQue*/
voidArrive(STACK*s1,LinkedQueTp*p,ElemTypex)/*车辆到达处理*/{
intf;
f=Push(s1,x);
/*新到车辆进入停车场栈。
在栈s1的栈顶插入数据元素x*/
if(f==False)/*如停车场满,就进入便道队列等待*/{
EnLinkedQue(p,x.num);
第%d号车停在便道的第%d号车位上\n"
x.num,p->
num);
else{/*新到车辆进入停车场*/
第%d号车停在停车场的第%d号车位上\n"
x.num,s1->
top+1);
}/*Arrive*/
voidDelive(STACK*s1,STACK*s2,LinkedQueTp*p,ElemTypex)
intn,f=False;
ElemTypey,z;
/*增加z*/
QUEUE*q;
while((s1->
top>
-1)&
&
(f!
=True))/*循环条件:
栈中有数据并且没找到那辆要出来的车*/
{/*在停车场中寻找要离开的车辆*/
y=Pop(s1);
/*弹出数据*/
if(y.num!
=x.num)/*如果栈顶元素不是要离开的车辆,就将其放如车辆规闭所*/
n=Push(s2,y);
/*压不离开的车辆入规避所*/
elsef=True;
/*找到要离开的车辆,此时y.num==x.num*/
/******/
/*规避所的车辆回原位*/
while(s2->
-1)
{/*将y改为z,不能改变Y因为里面存着要离开的车辆*/
z=Pop(s2);
/*规避所的车辆出栈*/
f=Push(s1,z);
/*再次进入停车场*/
if(y.num==x.num)/*在停车场中找到要离开的车辆*/
第%d号车应收费%d元"
y.num,(x.ar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 队列 应用 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)