数据结构实验2 栈和队列

#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<stdio.h>

const int maxsize = 2;
using namespace std;

int size123=0;

typedef struct car
{
	int carnum;
	int intime;
}car; 
typedef struct carout
{
	int carnum;
	int intime;
	struct carout* next;
}carout;
typedef struct
{
	struct car space[maxsize];
	int stacktop;
}stack;
typedef struct
{
	carout* front;
	carout* rear;
}queue;
stack carinspace;//停车场中的汽车空间
queue carinqueue;
int pcar = 0;//停车场中汽车数量
int pcarout = 0;//停车场外的数量
void car_in(int carnum, int cartime)
{
	if (carinspace.stacktop <maxsize)
	{
		carinspace.space[carinspace.stacktop].carnum = carnum;
		carinspace.space[carinspace.stacktop].intime = cartime;

		pcar++;
		printf("%d 号车进入停车场!时间为:%d\n", carinspace.space[carinspace.stacktop].carnum, carinspace.space[carinspace.stacktop].intime);
		carinspace.stacktop++;
	}
	else
	{
		carinqueue.front->carnum = carnum;
		carinqueue.front->intime = cartime;
		pcarout++;
		printf("%d 号车进入候车场!到达时刻:%d\n", carinqueue.front->carnum, carinqueue.front->intime);
		carinqueue.front->next = (carout*)malloc(sizeof(carout));
		carinqueue.front = carinqueue.front->next;
	}
}
	void car_leave(int carnum, int cartime)
	{
		stack carin2;
		int findcar=-1;
		carout* p, *f;
		carin2.stacktop = 0;
		cout << carinspace.stacktop << endl;
		cout << carinspace.space[0].carnum << endl;
		for (int i = 0; i <carinspace.stacktop; i++)
		{
			
			cout << "执行" << endl;
			if (carnum == carinspace.space[i].carnum)
			{
				findcar = i;
				break;
			}
		}
		if (findcar != -1)
		{
			for (;--carinspace.stacktop> findcar; carin2.stacktop++)
			{
				carin2.space[carin2.stacktop].carnum = carinspace.space[carinspace.stacktop].carnum;
				carin2.space[carin2.stacktop].intime = carinspace.space[carinspace.stacktop].intime;
				cout << carin2.space[carin2.stacktop].carnum << endl;
			}
			printf("%d 号车离开停车场!离开时刻:%d停留时长:%d\n", carinspace.space[carinspace.stacktop].carnum, cartime, cartime - carinspace.space[carinspace.stacktop].intime);
			pcar--;
			printf("应收停车费 %d\n", (cartime - carinspace.space[carinspace.stacktop].intime) * 5);
			for (int i = carin2.stacktop - 1; i >= 0; i--)
			{
				cout << "执行" << endl;
				carinspace.space[carinspace.stacktop].carnum = carin2.space[i].carnum;
				carinspace.space[carinspace.stacktop].intime = carin2.space[i].intime;
				carinspace.stacktop++;
				carin2.stacktop --;
			}
			if (carinqueue.front != carinqueue.rear)
			{
				cout << "执行" << endl;
				carinspace.space[carinspace.stacktop].carnum = carinqueue.rear->carnum;
				carinspace.space[carinspace.stacktop].intime = cartime;
				carinspace.stacktop++;
				pcar++;
				pcarout--;
				p = carinqueue.rear;
				carinqueue.rear = carinqueue.rear->next;
				free(p);
			}
		}
		/*else
		{
			p = carinqueue.front;
			if (p != carinqueue.front && p->carnum != carnum)
			{
				f = p->next;
				while (f != carinqueue.front && f->carnum != carnum)
				{
					p = f;
					f = f->next;
				}
				if (f->carnum == carnum)
				{
					findcar = 1;
					p->next = f->next;
					printf("%d 号车离开候车场!离开时间:%d,停留时长%d\n", f->carnum, cartime, cartime - f->intime);
					pcarout--;
					cout << "应付停车费:" << 0 <<"元"<< endl;
					free(f);
				}
			}
			if (p->carnum == carnum)
			{
				findcar = 1;
				carinqueue.rear = carinqueue.rear->next;
				printf("%d 号车离开候车场!离开时间:%d停留时长%d\n", p->carnum, cartime, cartime - p->intime);
				pcarout--;
				printf("应付停车费:%d\n", (cartime - p->intime) * 0);
				free(p);
			}
		}
		if (findcar == -1)
			printf("%d 号车不在停车场中\n", carnum);*/

	}
	int Result(char carmove, int carnum, int cartime)
	{
		switch (carmove)
		{
		case 'A':car_in(carnum, cartime); break;
		case 'D':car_leave(carnum, cartime); break;
		default:printf("输入错误!\n"); break;
		}
		return 1;
	}
int main()
{
	printf("欢迎来到石家庄铁道大学信1901-5张润轩的停车场\n");
	printf("请输入信息\n");
	printf("停车场大小预设为2");
	int carnum, cartime;
	char carmove;
	carinspace.stacktop = 0;
	carinqueue.front=carinqueue.rear=(carout*)malloc(sizeof(carout));
	while (1)
	{
		printf("\n车辆到达请输入A;\n车辆离开请输入D;\n显示停车场内车数请输入P;\n退出程序请输入E:\n");
		printf("\n请输入信息:\n");
		cin >> carmove;
		switch (carmove)
		{
			case 'A':
			{
				cin >> carnum;
				cin >> cartime;
				Result(carmove,carnum,cartime);
				break;
			}
			case 'D':
			{
				cin >> carnum >> cartime;
				Result(carmove, carnum, cartime);
				break;
			}
			case 'E':
			{
				return 0;
			}
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值