回 帖 发 新 帖 刷新版面

主题:求救!求救!不会做的停车场

停车场管理


停车场是一个可停放N辆车的狭长通道,只有一个大门汽车在停车场内按车辆到达时间的先后,由北向南排列, 如停车常内已停满车,则后来的汽车只能在门外的便道上等侯一旦有车开走,则排在便道上第一辆车即可开入,当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它开路,待该辆车开出大门外,其他车辆再按原次序进入车场,没辆车停放在车场的车在踏离开车场时必须按它停留的时间交付费用 以栈模拟停车场,以队列模拟车场外的便道,栈以顺序结构实现,队列以链表结构实现 许另设一个栈临时停放为给要离开的汽车让路而从停车场退下来的汽车
输入:
汽车到达或离开,用A和D表示;车牌号码;到达和离开的时间 以下是一个输入例子:(‘a’,1,5)(‘a’2,10),(‘d’,1,15)(‘a’,3,20)
(‘a’4,25),(‘d’,2,35)(‘e’,0,0) 
输出:
如是到达,则输出汽车在停车厂的停车位置;如是离开,则输出汽车在停车场内的停留的时间和应交的费用(在便道上停留的时间不收费)

本人写的程序如下:
#include<iostream.h>
#include<malloc.h>
typedef int elemtype;
typedef int status;
#define OK 1
#define ERROR 0
#define maxlen 2
#define NULL 0

typedef struct sqstact 
{
    elemtype num[maxlen];
    elemtype time[maxlen];
    elemtype top;
}stack;
typedef struct QNode
{
    elemtype num;
    elemtype time;
    struct *next;
}Que,*Queueptr;
typedef struct Queptr
{
    Queueptr front;
    Queueptr rear;
}LinkQueue;

void  initstack(stack &st)
{
    st.top=0;
}
int push(stack &st,elemtype x,elemtype y)
{
    if (st.top==maxlen-1)
    {
        cout<<"栈上溢出"<<endl;
        return 0;
    }
    else 
    {
        st.top++;
        st.num[st.top]=x;
        st.time[st.top]=y;
                  cout<<"车牌为"<<x<<"的汽车的停车位置是"<<st.top<<endl;
        return OK;
    }
}

int pop(stack &st)
{
    elemtype x,y;
    if (st.top==0)
    {
        cout<<"栈下溢出"<<endl;
        return 0;
    }
    else 
    {
        x=st.num[st.top];
        y=st.time[st.top];
        st.top--;
        return OK;
    }
}

void InitQueue(LinkQueue &Q)
{
    Q.front=Q.rear=(Queueptr )malloc(sizeof(Que));
    if(!Q.front)
    {
        return  ;
    }
    else
        Q.front->next=NULL;
    return  ;
}
void EnQueue(LinkQueue &Q,elemtype x,elemtype y)
{
    Queueptr p;
    p=(Que *)malloc(sizeof(Que));

    if(!p)    { cout<<"In Queue Error !"<<endl;    return  ;}
    p->num=x;
    p->time=y;
    p->next=NULL;
    Q.rear=p;
    return  ;
}

status DeQueue(LinkQueue &Q)
{
    elemtype x, y;
    Queueptr p;

    if(Q.front->next ==Q.rear->next )
        return ERROR;

    p= Q.front ;
    x= Q.front->num;
    y= Q.front->time;
    if(    Q.rear ==p)
        Q.rear->next =Q.front->next ;
    free(p);
    return OK;
}

void car_park()

    int n=0;
    char a;
    elemtype b,c,d,money=2;
    stack  st1, st2;
    LinkQueue Q;

    InitQueue(Q);

    initstack(st1); 

    initstack(st2);

    cin>>a>>b>>c;

    while(a!='e')
    {
        if(a=='a')
        {    
            if(n<maxlen&&Q.front==Q.rear)
                
            
            {
                push(st1,b,c);
                n++;
            }
            else
            {EnQueue(Q,b,c)}
        }
        else if (a=='d')
        {
            while(st1.num[st1.top]!=b)
            {
                push(st2,st1.num[st1.top],st1.time[st1.top]);
                pop(st1);
            }
            d=st1.time[st1.top];
            cout<<"停车时间为:"<<d<<"分钟"<<endl<<"应付"<<(c-d)*money<<"元"<<endl;
            pop(st1);
            while(st2.top!=0)
            {
                push(st1,st2.num[st2.top],st1.time[st2.top]);
                pop(st2);
            }
            if(Q.front!=Q.rear)
            {
                push(st1,Q.front->num,c);
                DeQueue(Q);
            }
            n--;
        }
        cin>>a>>b>>c;
    }
    return  ;
}

int main()
{
cout<<"欢迎使用停车场管理系统"<<endl;
cout<<"     a表示到达        "<<endl;
cout<<"     d表示离开        "<<endl;
cout<<"   e表示输入结束     "<<endl;
cout<<"请输入数据"<<endl;
    car_park();

    return OK;
}


   为什么我的结果回进入死循环?结果也是错的,帮帮忙呀!~~~~~谢谢了!!!!! 
如果可以能不能说出我错误的原因?  
 

 

回复列表 (共7个回复)

沙发

#include<iostream.h>
#include<malloc.h>
typedef int elemtype;
typedef int status;
#define OK 1
#define ERROR 0
#define MAXLEN 2
#define NULL 0

typedef struct sqstact 
{
    elemtype num[MAXLEN];
    elemtype time[MAXLEN];
    elemtype top;
}stack;
typedef struct QNode
{
    elemtype num;
    elemtype time;
    struct QNode *next;
}Que,*Queueptr;
typedef struct Queptr
{
    Queueptr front;
    Queueptr rear;
}LinkQueue;

void  initstack(stack &st)
{
    st.top=-1;
}
int push(stack &st,elemtype x,elemtype y)//从0开始存放,0~manlen-1
{
    if (st.top==MAXLEN-1)
    {
        cout<<"栈上溢出"<<endl;
        return 0;
    }
    else 
    {
        st.top++;
        st.num[st.top]=x;
        st.time[st.top]=y;
        cout<<"车牌为"<<x<<"的汽车的停车位置是"<<st.top<<endl;
        return OK;
    }
}

int pop(stack &st)
{
    if (st.top==-1)
    {
        cout<<"栈下溢出"<<endl;
        return 0;
    }
    else 
    {
        st.top--;
        return OK;
    }
}

void InitQueue(LinkQueue &Q)
{
    Q.front=Q.rear=(Queueptr )malloc(sizeof(Que));
    if(!Q.front)
        return ; 
    Q.front->num=0;
    Q.front->time=0;
    Q.front->next=NULL;
    return  ;
}
void EnQueue(LinkQueue &Q,elemtype x,elemtype y)
{
    Queueptr p;
    p=(Que *)malloc(sizeof(Que));

    if(!p)    
    { 
        cout<<"In Queue Error !"<<endl;    
        return  ;
    }
    p->num=x;
    p->time=y;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}

status DeQueue(LinkQueue &Q)
{
    
    Queueptr p;

    if(Q.front==Q.rear)
        return ERROR;
    p= Q.front->next;
    Q.front->next=p->next;
    if(Q.rear ==p)
        Q.rear=Q.front;
    free(p);
    return OK;
}

void car_park()

    int n=0;
    char a;
    elemtype b,c,d,money=2;
    stack  st1, st2;
    LinkQueue Q;
    InitQueue(Q);
    initstack(st1); 
    initstack(st2);
    cin>>a>>b>>c;
    while(a!='e')//'e'表示运行结束;
    {
        if(a=='a')//进栈;
        {    
            if(n<MAXLEN)//n<MAXLEN表示目前还有车位;
                            //Q.front==Q.rear表示目前队列为空,即:没有汽车等待入栈;
            {
                push(st1,b,c);
                n++;
            }
            else        //没有车位则把当前请求进栈的车放入等待队列;
                EnQueue(Q,b,c);
        }
        else if (a=='d')//出栈;
        {
            while(st1.num[st1.top]!=b)//找到要出栈的车,车牌为b;
            {
                push(st2,st1.num[st1.top],st1.time[st1.top]);//把它放入st2栈中;
                pop(st1);
                n--;
            }
            
            d=st1.time[st1.top];
            cout<<"车牌:"<<st1.num[st1.top]<<"\t停车时间:"<<c-d<<"分钟"
                <<"\t应付:"<<(c-d)*money<<"元"<<endl;
            pop(st1);
            n--;
            
            while(st2.top!=-1)//把刚刚从st1中出来的车重新放回到st1中;
            {
                push(st1,st2.num[st2.top],st2.time[st2.top]);
                n++;
                pop(st2);
            }
            
            while(Q.front!=Q.rear&&n<MAXLEN)//一有空车位,就把正在等待队列中的车进栈;
            {
                
                push(st1,Q.front->next->num,Q.front->next->time);
                n++;
                DeQueue(Q);
            }
            //n--;
        }
        cin>>a>>b>>c;
    }
    return  ;
}

int main()
{
    cout<<"欢迎使用停车场管理系统    "<<endl;
    cout<<"a表示到达                "<<endl;
    cout<<"d表示离开                "<<endl;
    cout<<"e表示输入结束            "<<endl;
    cout<<"请输入数据:                "<<endl;
    car_park();

    return OK;
}

板凳

这是运行结果:
欢迎使用停车场管理系统
a表示到达
d表示离开
e表示输入结束
请输入数据:
a 1 5
车牌为1的汽车的停车位置是0
a 2 10
车牌为2的汽车的停车位置是1
d 1 15
车牌为2的汽车的停车位置是0
车牌:1  停车时间:10分钟 应付:20元
车牌为2的汽车的停车位置是0
a 3 20
车牌为3的汽车的停车位置是1
a 4 25
d 2 35
车牌为3的汽车的停车位置是0
车牌:2  停车时间:25分钟 应付:50元
车牌为3的汽车的停车位置是0
车牌为4的汽车的停车位置是1
e 0 0
Press any key to continue

3 楼

运行良好啊!

4 楼

还有一点小的毛病:
这样就良好拉:
#include<iostream.h>
#include<malloc.h>
typedef int elemtype;
typedef int status;
#define OK 1
#define ERROR 0
#define MAXLEN 2
#define NULL 0

typedef struct sqstact 
{
    elemtype num[MAXLEN];
    elemtype time[MAXLEN];
    elemtype top;
}stack;
typedef struct QNode
{
    elemtype num;
    elemtype time;
    struct QNode *next;
}Que,*Queueptr;
typedef struct Queptr
{
    Queueptr front;
    Queueptr rear;
}LinkQueue;

void  initstack(stack &st)
{
    st.top=-1;
}
int push(stack &st,elemtype x,elemtype y)//从0开始存放,0~manlen-1
{
    if (st.top==MAXLEN-1)
    {
        cout<<"栈上溢出"<<endl;
        return 0;
    }
    else 
    {
        st.top++;
        st.num[st.top]=x;
        st.time[st.top]=y;
        cout<<"车牌为"<<x<<"的汽车的停车位置是"<<st.top<<endl;
        return OK;
    }
}

int pop(stack &st)
{
    if (st.top==-1)
    {
        cout<<"栈下溢出"<<endl;
        return 0;
    }
    else 
    {
        st.top--;
        return OK;
    }
}

void InitQueue(LinkQueue &Q)
{
    Q.front=Q.rear=(Queueptr )malloc(sizeof(Que));
    if(!Q.front)
    
    Q.front->num=0;
    Q.front->time=0;
    Q.front->next=NULL;

}
void EnQueue(LinkQueue &Q,elemtype x,elemtype y)
{
    Queueptr p;
    p=(Que *)malloc(sizeof(Que));

    if(!p)    
    { 
        cout<<"In Queue Error !"<<endl;    
        return  ;
    }
    p->num=x;
    p->time=y;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}

status DeQueue(LinkQueue &Q)
{
    
    Queueptr p;

    if(Q.front==Q.rear)
        return ERROR;
    p= Q.front->next;
    Q.front->next=p->next;
    if(Q.rear ==p)
        Q.rear=Q.front;
    free(p);
    return OK;
}

void car_park()

    int n=0;
    char a;
    elemtype b,c,d,money=2;
    stack  st1, st2;
    LinkQueue Q;
    InitQueue(Q);
    initstack(st1); 
    initstack(st2);
    cin>>a>>b>>c;
    while(a!='e')//'e'表示运行结束;
    {
        if(a=='a')//进栈;
        {    
            if(n<MAXLEN)//n<MAXLEN表示目前还有车位;
                            //Q.front==Q.rear表示目前队列为空,即:没有汽车等待入栈;
            {
                push(st1,b,c);
                n++;
            }
            else        //没有车位则把当前请求进栈的车放入等待队列;
                EnQueue(Q,b,c);
        }
        else if (a=='d')//出栈;
        {
            while(st1.num[st1.top]!=b)//找到要出栈的车,车牌为b;
            {
                push(st2,st1.num[st1.top],st1.time[st1.top]);//把它放入st2栈中;
                pop(st1);
                n--;
            }
            
            d=st1.time[st1.top];
            cout<<"车牌:"<<st1.num[st1.top]<<"\t停车时间:"<<c-d<<"分钟"
                <<"\t应付:"<<(c-d)*money<<"元"<<endl;
            pop(st1);
            n--;
            
            while(st2.top!=-1)//把刚刚从st1中出来的车重新放回到st1中;
            {
                push(st1,st2.num[st2.top],st2.time[st2.top]);
                n++;
                pop(st2);
            }
            
            while(Q.front!=Q.rear&&n<MAXLEN)//一有空车位,就把正在等待队列中的车进栈;
            {
                
                push(st1,Q.front->next->num,Q.front->next->time);
                n++;
                DeQueue(Q);
            }
            //n--;
        }
        cin>>a>>b>>c;
    }
    return  ;
}

int main()
{
    cout<<"欢迎使用停车场管理系统    "<<endl;
    cout<<"a表示到达                "<<endl;
    cout<<"d表示离开                "<<endl;
    cout<<"e表示输入结束            "<<endl;
    cout<<"请输入数据:                "<<endl;
    car_park();

    return OK;
}

5 楼

#include<iostream.h>     有错tc里面找不到该文件
#include<malloc.h>
typedef int elemtype;
typedef int status;
#define OK 1
#define ERROR 0
#define MAXLEN 2
#define NULL 0

typedef struct sqstact 
{
    elemtype num[MAXLEN];
    elemtype time[MAXLEN];
    elemtype top;
}stack;
typedef struct QNode
{
    elemtype num;
    elemtype time;
    struct QNode *next;
}Que,*Queueptr;
typedef struct Queptr
{
    Queueptr front;
    Queueptr rear;
}LinkQueue;

void  initstack(stack &st)  有错Declaration syntax error
{
    st.top=-1;
}
int push(stack &st,elemtype x,elemtype y)//从0开始存放,0~manlen-1有错Illeggal character是不是表示不支持中文?
{
    if (st.top==MAXLEN-1)
    {
        cout<<"栈上溢出"<<endl;
        return 0;
    }
    else 
    {
        st.top++;
        st.num[st.top]=x;
        st.time[st.top]=y;
        cout<<"车牌为"<<x<<"的汽车的停车位置是"<<st.top<<endl;
        return OK;
    }
}

int pop(stack &st)
{
    if (st.top==-1)
    {
        cout<<"栈下溢出"<<endl;
        return 0;
    }
    else 
    {
        st.top--;
        return OK;
    }
}

void InitQueue(LinkQueue &Q)
{
    Q.front=Q.rear=(Queueptr )malloc(sizeof(Que));
    if(!Q.front)
        return ; 
    Q.front->num=0;
    Q.front->time=0;
    Q.front->next=NULL;
    return  ;
}
void EnQueue(LinkQueue &Q,elemtype x,elemtype y)
{
    Queueptr p;
    p=(Que *)malloc(sizeof(Que));

    if(!p)    
    { 
        cout<<"In Queue Error !"<<endl;    
        return  ;
    }
    p->num=x;
    p->time=y;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}

status DeQueue(LinkQueue &Q)
{
    
    Queueptr p;

    if(Q.front==Q.rear)
        return ERROR;
    p= Q.front->next;
    Q.front->next=p->next;
    if(Q.rear ==p)
        Q.rear=Q.front;
    free(p);
    return OK;
}

void car_park()

    int n=0;
    char a;
    elemtype b,c,d,money=2;
    stack  st1, st2;
    LinkQueue Q;
    InitQueue(Q);
    initstack(st1); 
    initstack(st2);
    cin>>a>>b>>c;

6 楼

接上文:
while(a!='e')//'e'表示运行结束;
    {
        if(a=='a')//进栈;
        {    
            if(n<MAXLEN)//n<MAXLEN表示目前还有车位;
                            //Q.front==Q.rear表示目前队列为空,即:没有汽车等待入栈;
            {
                push(st1,b,c);
                n++;
            }
            else        //没有车位则把当前请求进栈的车放入等待队列;
                EnQueue(Q,b,c);
        }
        else if (a=='d')//出栈;
        {
            while(st1.num[st1.top]!=b)//找到要出栈的车,车牌为b;
            {
                push(st2,st1.num[st1.top],st1.time[st1.top]);//把它放入st2栈中;
                pop(st1);
                n--;
            }
            
            d=st1.time[st1.top];
            cout<<"车牌:"<<st1.num[st1.top]<<"\t停车时间:"<<c-d<<"分钟"
                <<"\t应付:"<<(c-d)*money<<"元"<<endl;
            pop(st1);
            n--;
            
            while(st2.top!=-1)//把刚刚从st1中出来的车重新放回到st1中;
            {
                push(st1,st2.num[st2.top],st2.time[st2.top]);
                n++;
                pop(st2);
            }
            
            while(Q.front!=Q.rear&&n<MAXLEN)//一有空车位,就把正在等待队列中的车进栈;
            {
                
                push(st1,Q.front->next->num,Q.front->next->time);
                n++;
                DeQueue(Q);
            }
            //n--;
        }
        cin>>a>>b>>c;
    }
    return  ;
}

int main()
{
    cout<<"欢迎使用停车场管理系统    "<<endl;
    cout<<"a表示到达                "<<endl;
    cout<<"d表示离开                "<<endl;
    cout<<"e表示输入结束            "<<endl;
    cout<<"请输入数据:                "<<endl;
    car_park();

    return OK;
}
1:Unable to open include file 'iostream.h'
28:declaration syntax error
32:116:Illegal character......Too many error or warning messages

7 楼

我用TC运行不了,出现了26个错误诶,都不知道怎么解决,你有时间帮忙帮忙修改下吗?我这几天急用.

我来回复

您尚未登录,请登录后再回复。点此登录或注册