2 u013382529 u013382529 于 2014.01.05 02:06 提问

数据结构关于双向栈的问题

我自己做的小程序 是一个停车管理系统 我把相关的数据结构的定义和函数的定义发下 求大家帮忙看看,是不是我定义的有问题,运行出现问题,大概是在进栈出栈上出现的问题,谢谢大家啦~~

typedef struct ds_Car //地上停车场车辆
{
int number; //车号
int hour; //到达的小时
int minute; //到达的分钟
}ds_CarNode;
typedef struct //地上停车场(采用双向栈)
{
ds_CarNode base[2]; // 0和1分别表示低端和高端栈顶和栈底
ds_CarNode *top[2];
int stacksize;//当前的车数
}ds_Park;
Status InitDStack(ds_Park &p)//构造一个空的双向栈
{
p.base[0]=(ds_CarNode
)malloc(DSPARKSIZE*sizeof(ds_Car));//为双向栈分配内存
if(!p.base)
exit(OVERFLOW);
p.base[1]=p.base[0]+DSPARKSIZE;
p.top[0]=p.base[0];
p.top[1]=p.top[1];
p.stacksize=0; //当前停的车辆数
return OK;
}
Status DPush(ds_Park &p,ds_CarNode e,int choice)//进栈 choice为从左右哪边进栈
{
if(p.top[0]>p.top[1])
printf("地上停车场已满!\n");
if(choice==0)
{
p.stacksize++;
p.top[0]++=e;
}
if(choice==1)
{
p.stacksize++;
*p.top[1]--=e;
}
return OK;
}
Status DPop(ds_Park &p,ds_CarNode e,int choice)//出栈 choice为从左右哪边出栈
{
if((p.top[0]==p.base[0])&&(p.top[1]==p.base[1]))
printf("地上停车场为空!\n");
if(choice==0)
{
p.stacksize--;
e=
--p.top[0];
}
if(choice==1)
{
p.stacksize--;
e=*++p.top[1];
}
return OK;
}

//地上停车场的离开
Status DSLeave(ds_Park &p1,ds_Park &p2,wait_Line &q1,wait_Line &q2)
{
int number,hour,minute;
int leave_hour,leave_minute;
int choice;
int flag=1; //用来实现是否退出循环
double money=0;
printf("请输入车牌号:\n");
scanf("%d",&number);
printf("离开停车场的小时:\n");
scanf("%d",&leave_hour);
printf("离开停车场的分钟:\n");
scanf("%d",&leave_minute);
printf("从哪个出口离开?(0\1)\n");
scanf("%d",&choice);
ds_CarNode e,m;
CarPtr w;
while(flag)
{
DPop(p1,e,choice);
DPush(p2,e,choice);
if(e.number==number)
{
flag=0;
int a=leave_hour-e.hour;
int b=leave_minute-e.minute;
money=((a*60+b)/60)*PRICE;
hour=e.hour;
minute=e.minute;
}
}
DPop(p2,e,choice);
while(p2.stacksize)
{
DPop(p2,e,choice);
DPush(p1,e,choice);
}
if(p1.stacksize {
if(q1.length!=0)
{
DeQueue(q1,w);
m.hour=leave_hour;
m.minute=leave_minute;
m.number=w->number;
DPush(p1,m,choice);
printf("车牌号为%d的车已由等候队列进入停车场,停车位为%d\n",m.number,p1.stacksize);
}
if(q2.length!=0)
{
DeQueue(q2,w);
m.hour=leave_hour;
m.minute=leave_minute;
m.number=w->number;
DPush(p1,m,choice);
printf("车牌号为%d的车已由等候队列进入停车场,停车位为%d\n",m.number,p1.stacksize);
}
}
printf("停车费为%lf\n欢迎下次光临!",money);
return OK;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
大话数据结构七:两栈共享存储空间(双向栈)
1. 为什么要使用双向栈? 通过上一篇博客特殊的线性表(栈),可以知道栈的顺序存储性能相对较高,因为它不存在插入和删除时移动元素的问题,但是它有一点缺陷:要实现确定数组存储容量的大小,万一不够,需要扩充容量。这时双向栈就派上用场了,它可以最大限度的利用事先开辟的存储空间。 2. 双向栈有什么特点? 数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始
数据结构 括号匹配问题 (栈 C语言)
现在,有一行括号序列,请你检查这行括号是否配对。 输入数据保证只含有"[","]","(",")"四种字符输出如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 代码如下 #include #include #define SIZE 20 #define CREMENT 10 typedef struct{ char *ba
数据结构经典问题——出栈顺序
对于数据结构的问题,如果思路稍有不对,就容易陷入逻辑混乱。我希望自己对数据结构的理解,能够给大家一点帮助。我会将所有我有过心得的问题在我的博客上写出来,欢迎大家浏览,如果有什么不对的地方,还请大家指正,有问题可以给我留言,我会尽量解决,谢谢。 声明一下我写博客的初衷:不是炫耀,而是回报。因为我在计算机方面的知识好多都从网上找到答案,因此我也 将自己搜寻整理的材料,自己写的材料,展示到网
数据结构 双向栈 代码
数据结构 双向栈 代码
数据结构C语言实现系列[3]——关于栈的一些习题
#include stdio.h>#include stdlib.h>typedef int elemType;#include "LinkAccess.c"/* 对由fname所指字符串为文件名的程序文件进行括号配对检查 */int bracketsCheck(char *fname){    struct sNode *a;        /* 申明一个链栈 */        char 
C语言数据结构顺序栈之迷宫求解最短路径
数据结构习题与解析(B级第3版) 李春葆 喻丹丹 编著 3.2
【数据结构】栈面试题--一个数组实现两个栈
一个数组实现两个栈,有以下几种方法: 1.数组的奇数位置存储一个栈的元素,偶数位置存储另一个栈的元素; 2.两个栈分别从数组的中间向两头增长; 3.两个栈分别从数组的两头开始增长。 从图片中我们都可以看出,前边两种方法再一定的情况下会造成空间的浪费,所以我们 采用第三种方式完成。 下边给出代码实现: #include using namespace std; #include
从两端生长的双向栈-C语言版
#include #define MaxStackSize 100 typedef int DataType; int len,x; #include"SeqStack.h" int main() { SeqStack myStack; int i,n,m; StackInitiate(&myStack); for(i=0;i StackPush(&myStack,i+1,
数据结构(17)栈典型问题之C++实现数值转换
导言 数值转换 算法 具体实现包括顺序栈完整定义 运行结果 结束语导言前面学习了顺序栈的一些基本定义和函数操作原型,本章是以数值转换为例子,给出顺序栈所有函数的实现。数值转换十进制N和其他dd进制的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理: N=(N div d)×d+N mod dN=(N\ div \ d) \times d + N \ mod \
数据结构试验之双向栈实现
数据结构双向栈实现实验,采用双向栈技术可实现对空间的有效利用!