| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3492 人关注过本帖, 1 人收藏
标题:停车场管理系统(栈和队列)
只看楼主 加入收藏
appleflower
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-9
收藏(1)
 问题点数:0 回复次数:3 
停车场管理系统(栈和队列)
#include<iostream.h>
const int N=3;
const int M=3;
typedef struct
{
     int num;
     int arrtime;
}elemtype;

struct seqstack
{
     elemtype stack[N+1];
     int top;
}s1,s2;

struct link
{
     elemtype data;
     link *next;
};

struct linkqueue
{
     link *front,*rear;
}q;

seqstack inistack(seqstack S)
{
     S.top=0;
     return S;
}

seqstack push(seqstack S,elemtype x)
{
     S.top++;
     S.stack[S.top]=x;
     return S;
}

seqstack pop(seqstack S)
{
     S.top--;
     return S;
}

elemtype gettop(seqstack S)
{
     return S.stack[S.top];
}

int empty(seqstack S)
{
     if(S.top==0)
          return 1;
     else return 0;
}

linkqueue iniqueue(linkqueue s)
{
     link *p;
     p=new link;
     p->next=NULL;
     s.front=s.rear=p;
     return s;
}

linkqueue enqueue(linkqueue s,elemtype x)
{
     link *p;
     p=new link;
     p->data=x;
     p->next=s.rear->next;
     s.rear->next=p;
     s.rear=p;
     return s;
}

linkqueue dlqueue(linkqueue s)
{
     link *p=s.front;
     s.front=p->next;
     delete p;
     return s;
}

elemtype gethead(linkqueue s)
{
     return s.front->next->data;
}

int emptyqueue(linkqueue s)
{
     if(s.front==s.rear)
          return 1;
     else
          return 0;
}

void arrive(elemtype x)
{
     if(s1.top==N)
          q=enqueue(q,x);
     else
          s1=push(s1,x);
}

void delive(elemtype x)
{
     int f=1;
     elemtype y;
    link *r;
     while((!empty(s1)&&(f==1)))
          if(s1.stack[s1.top].num!=x.num)
          {
               y=gettop(s1);
            s1=pop(s1);
               s2=push(s2,y);
          }
          else
          {f=0;y=gettop(s1);
          s1=pop(s1);
          cout<<"停车场中有编号为"<<x.num<<"的车"<<endl;
          cout<<"该车将离开,应收停车费:"<<(x.arrtime-y.arrtime)*M<<"元"<<endl;
          while(!empty(s2))
          {y=gettop(s2);
          s2=pop(s2);
          s1=push(s1,y);
          }
          if(!emptyqueue(q))
          {
               y=gethead(q);
               q=dlqueue(q);
               s1=push(s1,y);
          }
          }
          if(empty(s1))
          {
               while(!empty(s1))
               {
                    y=gettop(s2);
                    s2=pop(s2);
                    s1=push(s1,y);
               }
               if(!emptyqueue(q))
               {
                    link *p=q.front;
                    while((p!=NULL)&&(p->data.num!=x.num))
                    {
                         r=p;
                         p=p->next;
                    }
                    if(p!=NULL)
                    {
                         cout<<"便道上有编号为"<<x.num<<"的车辆"<<endl;
                         cout<<"该车将离开,应收停车费0.00 元:"<<endl;
                         r->next=p->next;
                         delete p;
                    }
                    else
                         cout<<"便道上没有编号为"<<x.num<<"的车辆,输入的车辆不存在!!"<<endl;
               }
          }
         
}
void pr1()
{
     int t=s1.top;
     while(t!=0)
     {cout<<endl;
          cout<<"停车场中的车辆编号和到达时间"<<endl;
          cout<<s1.stack[t].num<<" "<<s1.stack[t].arrtime<<endl;
          t--;
     }
     cout<<endl;
}
void pr2()
{
     link *p=q.front->next;
     
     while(p!=NULL)
     {
          cout<<"车进入便道!";
          cout<<"便道中的车编号和到达时间"<<endl;
          cout<<p->data.num<<"  "<<p->data.arrtime<<endl;
          p=p->next;
     }
}
void main()
{
     int n;
     elemtype x;
     s1=inistack(s1);
     s2=inistack(s2);
     q=iniqueue(q);
     while(1)
     {   cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
          cout<<"        **欢迎进入车辆管理系统**        "<<endl;
          cout<<"请输入处理车辆的代号(1. 到达  2. 离开 )"<<endl;
          cin>>n;
        cout<<"请输入车辆编号及到达或离开的时间"<<endl;
          cin>>x.num>>x.arrtime;
          if(n==1)
          {
               arrive(x);
               pr1();
               pr2();
          }
          else
               if(n==2)
          {
               delive(x);
               pr1();
               pr2();
          }
          else break;
     }
     cout<<endl;
}

[[italic] 本帖最后由 appleflower 于 2007-12-9 11:12 编辑 [/italic]]
搜索更多相关主题的帖子: 队列 
2007-12-09 11:10
wpwangpeng
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-12-11
收藏
得分:0 
lz 真厉害!!!!
佩服!!!!!
2007-12-11 14:40
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
收藏
得分:0 
怎么全部是收取0元

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-12-12 01:43
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
收藏
得分:0 
没有记忆功能  要数据库

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2008-01-29 16:14
快速回复:停车场管理系统(栈和队列)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017775 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved