⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bus.cpp

📁 一个停车场管理的模拟程序!VC++6.0下开发~!
💻 CPP
字号:
#include<stdlib.h>
#include<stdio.h>

#define  stacksize  100; 
#define  STACKINCREMENT  10;  

enum status{FALSE=0 ,ERROR=0, OVERFLOW=0,TRUE=1,OK=1};

typedef struct{
	char flag;
	int num;
	int time;
}car_infor;

typedef struct{
	car_infor *base;
	car_infor *top;
}sqstack;

typedef struct qnode{
	car_infor data;
	struct qnode *next;
}qnode,*queueptr;

typedef struct{
	queueptr front;
	queueptr rear;
}linkqueue;


status InitStack(sqstack &S)
{
	S.base=(car_infor*)malloc(3*sizeof(car_infor));
	//	S.base=(car_infor*)malloc(STACK_INIT_SIZE*sizeof(car_infor));
    if (!S.base)
		exit(OVERFLOW);												//存储分配失败
    S.top = S.base;
    return OK;
}																	// InitStack

status GetTop(sqstack S,car_infor &e) 
{

												// 若栈不空,则用e 返回S的栈顶元素,
												// 并返回OK;否则返回ERROR
	if (S.top==S.base)
    return ERROR;									//栈空
    e=*(S.top-1);
    return OK;
}													 // GetTop
	

status Push(sqstack &S, car_infor e) 
{

																	  //插入元素e为新的栈顶元素

	*S.top = e;
	S.top++;
	return OK;
}																			// Push



status Pop(sqstack &S, car_infor &e)
{							               // 若栈不空,则删除S的栈顶元素,用e返回
									   // 其值,并返回OK;否则返回ERROR
	if (S.top==S.base)						 // 栈空,栈溢出(下溢)
    return ERROR;
    e = *--S.top;
    return OK;
}												//Pop


status InitQueue (linkqueue &Q) 
{
                                            // 构造一个空队列Q
	Q.front = Q.rear =(queueptr)malloc(sizeof(qnode));
                      //产生一个头结点,头、尾指针均指向头结点
	if (!Q.front) exit (OVERFLOW);                   
                                           // 存储分配失败
    Q.front->next = NULL;
    return OK;
}      



status EnQueue (linkqueue &Q, car_infor e) 
{
	queueptr p;														// 插入元素e为Q的新的队尾元素
	p=(queueptr)malloc(sizeof(qnode));
    if (!p)  exit (OVERFLOW);								 // 存储分配失败
    p->data = e;   p->next = NULL;
    Q.rear->next = p;    Q.rear = p;
    return OK;
}

status DeQueue (linkqueue &Q, car_infor &e) {
													// 若队列不空,则删除Q的队头元素,
													// 用 e 返回其值,并返回OK;否则返回ERROR
	queueptr p;
   if (Q.front == Q.rear)    
	   return ERROR;									//队空
   p = Q.front->next; e = p->data;							//p指向队头元素   
   Q.front->next = p->next; 
																//修改头结点指针域,指向新的队头元素
   if (Q.rear==p) 
	   Q.rear=Q.front;
   free (p);														//释放被删掉的原队头元素
   return OK;
}

int main()
{
	sqstack    port;//停车场
	sqstack    temp;//出车时临时使用
	linkqueue  road;//便道
	car_infor  m,n;//输入时暂存数据
	int cartime,carcost,pos,q;//循环所用变量

	InitStack(port);
	InitStack(temp);
	InitQueue(road);

	printf("The length of the carport is 3.\n");

	printf("Please input the datas (A/D,number,time) : \n");
	scanf("%c%d%d",&m.flag,&m.num,&m.time);
	do
	{
		if ( m.flag=='A')
		{
			Push(port , m);
				
			printf("%c %d %d",port.base->flag,port.base->num,port.base->time);
			printf("\n##");scanf("%d",&q);
			printf("Please input the datas2 (A/D,number,time) :\n");
			scanf("%c%d%d",&m.flag,&m.num,&m.time);
			printf("\n##");scanf("%d",&q);
//			printf("%c%d%d",m.flag,m.num,m.time);
			printf("\n##");scanf("%d",&q);
			scanf("%c%d%d",&m.flag,&m.num,&m.time);
			printf("\n##");scanf("%d",&q);
			printf("%c%d%d",m.flag,m.num,m.time);
			printf("\n##");scanf("%d",&q);
			scanf("%c%d%d",&m.flag,&m.num,&m.time);
			printf("\n##");scanf("%d",&q);
			scanf("%c%d%d",&m.flag,&m.num,&m.time);

			printf("%c%d%d",m.flag,m.num,m.time);
			printf("\n##");scanf("%d",&q);

			if(port.top-port.base==3)
				EnQueue(road , m);
		}
		else
		{
			do 
			{
				if(port.top==port.base)
					return ERROR;
				else
				{
				Pop(port , n);
				if(n.num!=m.num)
				Push(temp , n);
				}
			}
			while(n.num==m.num);

			cartime=m.time-n.time;
			carcost=3*cartime;
			pos=port.top-port.base+1;

			printf("The number of car is : ",m.num);
			printf("The position of car is : ",pos);
			printf("The time of car is : ",cartime);
			printf("the cost of car is : ",carcost);
			do
			{
				Pop(temp , n);
				Push(port , n);
			}
			while(temp.top==temp.base);
			if(road.front != road.rear)
			{
				DeQueue(road,n);
				Push(port,n);
			};
			printf("Please input the datas (A/D,number,time) : ");
			scanf("%c%d%d",m.flag,m.num,m.time);

		}
	}
	while(m.flag=='E');
	return OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -