using namespace std; #define OVERFLOW -2 #define OK 1 #define ERROR 0#define STACK_INIT_SIZE 100 #define STACKINCRENT 10 #define NULL 0 struct SNode{ char CState; int CNumber; int CTime;
6 / 10
个人收集整理 仅供参考学习
};//定义一个结构体结点 typedef struct {
SNode *base; SNode *top; int stacksize;
}SqStack;//分配栈的存储空间 typedef struct QNode{ SNode date; struct QNode *next;
}QNode,*QueuePtr;//队列链表结点 typedef struct { QueuePtr front; QueuePtr rear;
}LinkQueue;//分配队列的存储空间 ////////////////////////////////////////////////// //函数的建立
int InitStack(SqStack &S){ //构造一个栈
S.base=new SNode[STACK_INIT_SIZE]; if(!S.base)exit(OVERFLOW); S.top=S.base;
S.stacksize=STACK_INIT_SIZE; return OK; }
int Push(SqStack &S,SNode e){ //入栈
*S.top++=e; return OK; }
int Pop(SqStack &S,SNode &e){ //出栈
if(S.top==S.base)return ERROR; e=*--S.top; return OK; }
int InitQueue(LinkQueue &Q){ //建一个空队列
Q.front=Q.rear=new QNode; Q.front->next=NULL; return OK; }
int EnQueue(LinkQueue &Q,SNode e){ //入队列 QNode *p;
7 / 10
个人收集整理 仅供参考学习
p=new QNode;
if(!p)exit(OVERFLOW); p->date=e; Q.rear->next=p; Q.rear=p; return OK; }
int DeQueue(LinkQueue &Q,SNode &e){ //出队列
if(Q.front==Q.rear) return ERROR; QNode *p;
p=new QNode; p=Q.front->next; e=p->date;
Q.front->next=p->next; if(Q.rear==p)Q.rear=Q.front; delete(p); return OK; }
//////////////////////////////////////////// int main(){
SqStack S1,S2; LinkQueue Q; InitStack(S1); InitStack(S2); InitQueue(Q);
/*构造两个空栈S1,S2和一个队列Q*/ int n,price,i=1;
cout<<\"停车场有多少个位置?\"<>n;cout<<\"每分钟的价格是多少?\"<>price; SNode k; do{cout<<\"输入信息\"<>k.CState>>k.CNumber>>k.CTime;if(k.CState!='A'&&k.CState!='D'&&k.CState!='E'){ cout<<\"输入错误,请重新输入\"<if(k.CState=='A'){if(S1.top-S1.base>=n){
8 / 10
个人收集整理 仅供参考学习
EnQueue(Q,k);
cout<<\"停车场已满,车子放在便道上的\"<Push(S1,k);//K入栈
cout<<\"车子放在停车场的\"<}//到达状态的处理 else if(k.CState=='D'){ SNode e,a,g; while(1){Pop(S1,e);//删除栈顶元素,返回一个e
if(e.CNumber==k.CNumber){//如果返回的车牌和输入的车牌一样就输出停留时间和所需费用文档收集自网络,仅用于个人学习 int time,money;
time=k.CTime-e.CTime; money=time*price;
cout<while(S2.top-S2.base!=0){//S2不空就把S2的元素给S1 Pop(S2,a); Push(S1,a); }//whilewhile(S1.top-S1.basePush(S1,g); }//whilebreak;//当弹出的e和我们输入的k车牌号一样时跳出循环体 }//if
else Push(S2,e);//当弹出的e和我们输入的k车牌号不一样时,e入栈s2且继续循环体 }//while
}//离去状态的处理
}while(k.CState!='E');//当状态为结束时 结束输入 return 0; }//main
9 / 10
个人收集整理 仅供参考学习
10 / 10