您的位置:首页 > 理论基础 > 数据结构算法

数据结构,栈和队列,停车场模型 ZC

2016-04-15 22:07 267 查看
#include <time.h>

#include <stdio.h>

#include<iostream>

using namespace std;

//队列

char queue[11]={'0','0','0','0','0','0','0','0','0','0'};

//栈堆

struct stack

{

char name;

char starttime[3];

char overtime[3];

}sk[10];

//1.直接将字符串进行减法,其结果都为三

int jstime(int i)

{

int a,b,c;

a=int(sk[i].overtime[0]-sk[i].starttime[0]);

b=int(sk[i].overtime[1]-sk[i].starttime[1]);

c=a*10+b;

if(c>=0)

return c;

else

return (c+60);

}

//判断栈满返还栈值

int pdstack()

{

int i;

for(i=0;i<10;i++)

{

if(sk[i].name=='0')

return i;

else if(i==9)

return -1;

}

return 0;

}

int pdqueue()

{

int i=0;

while(queue[i]!='0')

{

i++;

}

return i;

}

//加入队列

void inqueue(char car)

{

int i;

for(i=0;i<10;i++)

if(queue[i]=='0')

{

queue[i]=car;

break;

}

}

//从队列中出列

char outqueue()

{

char car;

int i;

car=queue[0];

for(i=0;i<10;i++)

{

queue[i]=queue[i+1];

if(queue[i]=='0')

{

break;

}

}

return car;

}

//入栈

void instack(char car,int i)

{

time_t t = time(0);

sk[i].name=car;

strftime(sk[i].starttime, sizeof(sk[i].starttime), "%M",localtime(&t) );

}

//出栈

int outstack(int i)

{

int k;

char c;

//学会时间函数的调用

time_t t = time(0);

strftime(sk[i].overtime, sizeof(sk[i].starttime), "%M",localtime(&t) );

cout<<sk[i].name<<"车出列"<<endl;

cout<<"时间为:"<<jstime(i)<<endl;

//之前将break写成return

for(k=i;k<10;k++)

{

//之前后两个顺序没放好,导致出现逻辑错误

if(k==9)

{

sk[k].name='0';

break;

}

if(sk[k].name=='0')

{

sk[k-1].name='0';

break;

}

sk[k].name=sk[k+1].name;

strcpy(sk[k].starttime,sk[k+1].starttime);

}

if(queue[0]!='0')

{

c=outqueue();

i=pdstack();

instack(c,i);

}

return 0;

}

//查找栈中车位

//3 之前没有考虑到万一栈内没有车牌怎么办

int findcar(char a)

{

int i;

for(i=0;i<10;i++)

if(sk[i].name==a)

return i;

return -1;

}

//来车模型

void incar(char car)

{

int pd;

pd=pdstack();

if(pd==-1)

inqueue(car);

else

instack(car,pd);

}

//出车模型

int outcar(char car)

{

int i;

i=findcar(car);

if(i==-1)

{

cout<<"车库内不存在此车"<<endl;

return 0;

}

outstack(i);

return 0;

}

//初始化栈堆

void Init()

{

int i;

for(i=0;i<10;i++)

{

sk[i].name='0';

}

}

int main( )

{

char a;

int b,c;

int f,e;

Init();

while(1)

{

cin>>a>>b>>c;

if(c==0)

{

if(b==1)

{

incar(a);

}

else if(b==2)

{

outcar(a);

}

else if(b==0)

{

if(a=='p'||a=='P')

{

e=pdstack();

if(e==-1)

cout<<10<<endl;

else

cout<<e<<endl;

}

else if(a=='w'||a=='W')

{

f=pdqueue();

cout<<f<<endl;

}

else if(a=='e'||a=='E')

{

//学会使用return 退出

return 0;

}

else

cout<<"ERROR!"<<endl;

}

else

{

cout<<"ERROR!"<<endl;

}

}

else

cout<<"ERROR!"<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: