有关栈和队列的问题!!

heiforest 2003-08-25 01:12:26
小弟有一个问题,希望各位大侠可以给予赐教!帮忙提供源代码!小弟感激不尽哪!!


[问题描述]
设停车场是一个可停放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'表示到达
(arrival);'D'表示离去(departure);'E'表示输入结束(end)。
[实现提示]
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结
构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:
汽车牌照号码和进入停车场的时刻。



...全文
71 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
heiforest 2003-09-04
  • 打赏
  • 举报
回复
算了,我现在已经不需要了!!还是谢谢你哈!!!
frankzch 2003-09-02
  • 打赏
  • 举报
回复
1、分太少,才20?
2、你给我发个TC3.0过来,我手上没有
heiforest 2003-09-02
  • 打赏
  • 举报
回复
多谢啦!!给分!!
heiforest 2003-08-27
  • 打赏
  • 举报
回复
你能不能帮人帮到底,给我完整的源代码哈??
^_^!!!多谢啦!
frankzch 2003-08-26
  • 打赏
  • 举报
回复
请问:在便道上的汽车想离开怎么处理??
heiforest 2003-08-26
  • 打赏
  • 举报
回复
哦!!不想停车了他可以离开 啊,只有进入了便道的车才开始收费啊!!
frankzch 2003-08-26
  • 打赏
  • 举报
回复
你自己去编译,我最近一直在搞算法,一直是用类C写程序的;
手边也没有编译器
这个程序我尽量用C写的,应该可以编译好的
frankzch 2003-08-26
  • 打赏
  • 举报
回复
我的意思是:汽车上便道后发现等的时间太长,突然改变主意不在这个停车场停车了,他要离开,怎么办?
heiforest 2003-08-26
  • 打赏
  • 举报
回复
编译可以成功的吗?
heiforest 2003-08-26
  • 打赏
  • 举报
回复
谢谢啦!!!在便道上的汽车要先离开等要走的那辆车走了以后再按照原来的顺序进入!多谢啊!
frankzch 2003-08-26
  • 打赏
  • 举报
回复
#include "stdio.h"
#define FEI 100 //单位时间内收取的费用
#define INIT_STACK_SIZE 100
#define STACKINCREMENT 10
typedef struct{int number,time;}ElemType;

//以下为栈及队列的定义
typedef struct {ElemType *base;
ElemType *top;
int stacksize;}SqStack;

typedef struct LQNode{ElemType data;
struct LQNode *next;}LQNode;
typedef struct{LQNode *front,*rear;}LQueue; //带头结点的链式队列

SqStack SS; //两个全局变量
LQueue LQ;

//以下为栈的基本操作
int InitStack(SqStack &s)
{
if(!(s.base=(ElemType *)malloc(INIT_STACK_SIZE*sizeof(ElemType))))
exit(0);
s.top=s.base;
s.stacksize=INIT_STACK_SIZE;
return 1;
}

int push(SqStack &s,ElemType e)
{
if((s.top-s.base)==s.stacksize)
{
if(!(s.base=(ElemType*)
relloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(ElemType))))
exit(0);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*(s.top)=e;
s.top++;
return 1;
}

void pop(SqStack &s,ElemType &e)
{
e=*(s.top);
s.top--;
}

int StackEmpty(SqStack s)
{
if(s.base==s.top)return 1;
return 0;
}

//以下为队列的基本操作
int InitQueue(LQueue &q)
{
if(!(q.front=(LQNode *)malloc(sizeof(LQNode))))
exit(0);
q.rear=q.front;
return 1;
}

int EnQueue(LQueue &q,ElemType e)
{ LQNode p;
if(!(p=(LQNode *)malloc(sizeof(LQNode))))
exit(0);
p->data=e;
p->next=q.rear->next;
q.rear->next=p;
return 1;
}

int DeQueue(LQueue &q,ElemType &e)
{
if(q.front==q.rear)exit(0);
e=q->front->data;
q->front=q->front->next;
return 1;
}

int QueueEmpty(LQueue q)
{
if(q.front==q.rear)return 1;
return 0;
}

//以下为主函数中调用的两个函数
void arrival(ElemType t)
{if(StackEmpty(SS))
push(SS,t);
else
EnQueue(LQ,t);
}

void departure(ElemType t)
{ElemType e;
pop(SS,e);
if(e!=t)
{SqStack temp;
while(e!=t)
{push(temp,e);
pop(SS,e);}
}
printf("the N0.%d car need pay %d yuan",e.number,(t.time-e.time)*FEI);//帐单
while(!StackEmpty(temp))
{pop(temp,e);
push(SS,e);}
if(!QueueEmpty(LQ))
{DeQueue(LQ,e);
e.time=t.time; //修改为进入停车场的时间
push(SS,e);}
}


main()
{InitStack(SS);
InitQueue(LQ);
ElemType t;
char status;
scanf("%c,%d,%d",status,t.number,t.time);
while(t.status!='E')
{switch(t.status)
{case 'A':arrival(t); //到达处理函数
case 'D':departure(t); //离开处理函数
default:break;
};
scanf("%c,%d,%d",t.status,t.number,t.time);
}
}

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧