数据结构 实验二.docx

上传人:b****6 文档编号:5376572 上传时间:2022-12-15 格式:DOCX 页数:15 大小:157.35KB
下载 相关 举报
数据结构 实验二.docx_第1页
第1页 / 共15页
数据结构 实验二.docx_第2页
第2页 / 共15页
数据结构 实验二.docx_第3页
第3页 / 共15页
数据结构 实验二.docx_第4页
第4页 / 共15页
数据结构 实验二.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构 实验二.docx

《数据结构 实验二.docx》由会员分享,可在线阅读,更多相关《数据结构 实验二.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构 实验二.docx

数据结构实验二

数据结构实验报告

2011~2012学年第***学期****级******专业

班级:

***学号:

*********姓名:

******

实验二栈和队列及其应用

一、实验目的:

1.掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。

2.掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,队列顺序存储结构、链式存储结构和循环队列的实现,以便在实际问题背景下灵活运用。

二、实验内容:

1.链栈的建立、入栈、出栈操作。

2.环形队列的建立、入队、出队操作。

3.停车场管理。

设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

试为停车场编制按上述要求进行管理的模拟程序。

实现提示:

  以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。

每一组输入数据包括三个数据项:

汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:

若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

栈以顺序结构实现,队列以链表(带头结点)实现。

  需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。

输入数据按到达或离去的时刻有序。

栈中每个元素表示一辆汽车,包含两个数据项:

汽车的牌照号码和进入停车场的时刻。

设n=2,输入数据为:

(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。

每一组输入数据包括三个数据项:

汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,‘A’表示到达;‘D’表示离去,‘E’表示输入结束。

三、实验要求:

1.C/C++完成算法设计和程序设计并上机调试通过。

2.撰写实验报告,提供实验结果和数据。

3.写出算法设计小结和心得。

四、程序源代码:

1.

#include

#include

typedefintElemType;

typedefstructstnode

{

ElemTypedata;

structstnode*next;

}LinkStack;

voidInitStack(LinkStack*&ls)

{

ls=NULL;

}

voidPush(LinkStack*&ls,ElemTypex)

{

LinkStack*p;

p=(LinkStack*)malloc(sizeof(LinkStack));

p->data=x;

p->next=ls;

ls=p;

}

intPop(LinkStack*&ls,ElemType&x)

{

LinkStack*p;

if(ls==NULL)

{

cout<<"栈已空!

"<

return0;

}

else

{

p=ls;

x=p->data;

ls=ls->next;

free(p);

return1;

}

}

voidmain()

{

LinkStack*ls;

InitStack(ls);

inta[5]={1,2,3,4,5};

inti=0,x;

while(i<5)

{

Push(ls,a[i]);

cout<<"元素"<

}

while

(1)

{

if(Pop(ls,x))

cout<<"元素"<

else

break;

}

}

2.

#include

constintQueueSize=6;

typedefintElemType;

typedefstructsqqueue

{

ElemTypedata[QueueSize];

intfront,rear;

}SqQueue;

voidInitQueue(SqQueue&sq)

{

cout<<"初始化队列!

"<

sq.rear=sq.front=0;

}

intEnQueue(SqQueue&sq,ElemTypex)

{

if((sq.rear+1)%QueueSize==sq.front)

{

cout<<"队列已满!

"<

return0;

}

sq.rear=(sq.rear+1)%QueueSize;

sq.data[sq.rear]=x;

return1;

}

intDeQueue(SqQueue&sq,ElemType&x)

{

if(sq.rear==sq.front)

{

cout<<"队列已空!

"<

return0;

}

sq.front=(sq.front+1)%QueueSize;

x=sq.data[sq.front];

return1;

}

voidmain()

{

SqQueuesq;

InitQueue(sq);

inta[6]={1,2,3,4,5,6};

inti=0,x;

while

(1)

{

if(EnQueue(sq,a[i]))

cout<<"元素"<

"<

else

break;

}

while

(1)

{

if(DeQueue(sq,x))

cout<<"元素"<

"<

else

break;

}

}

3.

#include

#include

constintStackSize=2;//定义停车场栈的容量

constdoubleprice=0.05;//定义停车场,单位时间的停车的价格

typedefstructnode

{

intnum;

intreach;

intleave;

}CarNode;//定义汽车结点

typedefstructsqst

{

CarNodedata[StackSize];

inttop;

}SqStack;//定义顺序栈(包括停车场栈和临时栈)

typedefstructQnode

{

CarNodedata;

structQNode*next;

}QType;//定义汽车结点

typedefstructqptr

{

QType*front,*rear;

}LinkQueue;//定义汽车链队

voidInitStack(SqStack&st)//初始化顺序栈

{

st.top=-1;

}

voidInitQueue(LinkQueue*&lq)//初始化链队(带头结点)

{

lq=(LinkQueue*)malloc(sizeof(LinkQueue));

lq->front=(QType*)malloc(sizeof(QType));

lq->front->next=NULL;

lq->rear=lq->front;

}

voidArrival(SqStack&park,LinkQueue*&lq)//车辆到达,入停车场顺序栈或便道链队

{

CarNodecar;

cout<<"请输入车牌号:

";

cin>>car.num;

if(park.top!

=StackSize-1)//停车场未满,车辆进入停车场(进入停车场栈)

{

cout<<"请输入到达时间:

";

cin>>car.reach;

park.top++;

cout<<"车辆在车场第"<<(park.top+1)<<"个位置."<

park.data[park.top]=car;//把这个车辆的信息记录入栈

}

else//停车场已满,车进便道(进入便道链队)

{

cout<<"该车须在便道等待!

"<

QType*s=(QType*)malloc(sizeof(QType));

s->data=car;

s->next=NULL;

if(lq->front==lq->rear)

{

lq->front->next=s;

lq->rear=s;

}

else

{

lq->rear->next=s;

lq->rear=s;

}

}

}

voidLeave(SqStack&park,SqStack&temp,LinkQueue*&lq)//车辆离开停车场,出停车场顺序栈

{

intplace;

CarNodeLeaveCar,InsideCar;

QType*s;

if(park.top>=0)//停车场有车

{

cout<<"请输入车在车场的位置(1--"<<(park.top+1)<<")";

cin>>place;

while(park.top>place-1)//如果该车后面有其他车,将该车后面的车依次入到临时栈)

{

temp.top++;

temp.data[temp.top]=park.data[park.top];

park.top--;

}

LeaveCar=park.data[park.top];//要离开的车出栈

park.top--;

while(temp.top>=0)//将临时栈中的车辆重新入到停车场栈中

{

park.top++;

park.data[park.top]=temp.data[temp.top];

temp.top--;

}

cout<<"请输入离开的时间:

";

cin>>LeaveCar.leave;

cout<<"离开车辆的车牌号为:

"<

cout<<"其到达时间为:

"<

"<

cout<<"应交费用为:

"<<(LeaveCar.leave-LeaveCar.reach)*price<<"元"<

if((lq->front!

=lq->rear)&&(park.top!

=StackSize-1))//便道的车辆进入停车场

{

s=lq->front->next;

InsideCar=s->data;

park.top++;

cout<<"便道上的车牌号为:

"<

InsideCar.reach=LeaveCar.leave;

lq->front->next=s->next;

if(s==lq->rear)//如果将便道上的车进入停车场后,便道上已经没有车

lq->rear=lq->front;

park.data[park.top]=InsideCar;//把车辆信息记录进车库

free(s);

}

else

cout<<"便道里没有车."<

}

else

cout<<"停车场里没有车."<

}

voidList1(SqStackst)//列表显示停车场车辆信息

{

inti;

if(st.top>=0)//判断停车场内是否有车

{

cout<<"车场:

"<

cout<<"位置车牌号到达时间"<

for(i=0;i<=st.top;i++)

{

cout<<(i+1)<<"";

cout<

cout<

}

}

else

cout<<"停车场里没有车"<

}

voidList2(LinkQueue*lq)//列表显示便道车辆信息

{

QType*p=lq->front->next;

if(lq->front!

=lq->rear)//判断便道上是否有车

{

cout<<"便道上车辆的号码为:

"<

while(p!

=NULL)

{

cout<<(p->data.num)<

p=p->next;

}

}

else

cout<<"便道上没有车."<

}

voidList(SqStackst,LinkQueue*lq)//显示停车场栈和便道链队中的车辆信息

{

inttag,flag=1;

while(flag==1)

{

cout<<"\n请选择:

1|2|3:

"<

cout<<"1.查看停车场内的车辆信息;\n2.查看便道上的车辆信息;\n3.返回到程序主界面."<

while

(1)

{

cin>>tag;

if(tag>=1||tag<=3)

break;

else

cout<<"请选择:

1|2|3:

";

}

switch(tag)

{

case1:

List1(st);break;//显示停车场车辆信息

case2:

List2(lq);break;//显示便道车辆信息

case3:

flag=0;break;

default:

break;

}

}

}

voidmain()

{

SqStackpark,temp;//栈park是模拟停车场,栈temp临时存放从停车场栈中退出来的车辆

LinkQueue*wait;//便道链队

charch;//定义程序控制信息

InitStack(park);//初始化停车场栈

InitStack(temp);//初始化临时栈

InitQueue(wait);//初始化便道链队

while

(1)

{

cout<<"\n'A'表示车辆到达;"<

cout<<"'D'表示车辆离开;"<

cout<<"'E'表示程序结束;"<

cout<<"'L'显示栈和队列中车辆信息."<

while

(1)

{

cin>>ch;//从键盘输入控制信息,

if(ch=='A'||ch=='D'||ch=='E'||ch=='L')

break;

else

cout<<"请输入:

'A'|'D'|'L'|'E'"<

}

switch(ch)

{

case'A':

Arrival(park,wait);break;

case'D':

Leave(park,temp,wait);break;

case'L':

List(park,wait);break;

case'E':

exit(0);break;

default:

break;

}

}

}

一、程序运行情况(写出输入数据及运行结果)

1.

2.

3.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1