数据结构 九

简单的停车场系统
Queue.h文件

#ifndef  _QUEUE_H_
#define  _QUEUE_H_
#define  SIZE  3
#define  FLAST 0
#define  TRUE  1 
//typedef int Data;
//数据
typedef struct node
{
	int number;
	int time;
}Node;
//栈结点
typedef struct stacknode
{
	Node data;
	struct stacknode *next;
}StackNode;
typedef struct stack
{
	StackNode *top;
	int sum;
}Stack;
//队列结点
typedef struct queuenode
{
	Node infom;
	struct queuenode *next;
}QueueNode;
//链式队列
typedef struct queue
{
	QueueNode *front;
	QueueNode *rear;
}Queue;
//初始化
int Init(Queue *park,Queue *wait,Stack *turn);
//主菜单
void Menu(Queue *park,Queue *wait,Stack *turn,int num,int t);
//测队列长度
int Length(Queue q);
//进队列
int Push(Queue *q,int num,int t);
//出队列
int Pop(Queue *q,int *num,int *t);
//停车
void park_car(Queue *wait,Queue *park);
//进栈
int Push1(Stack *s,int num,int t);
//出栈
int Pop1(Stack *s,int *num,int *t);
//离开
void leave_car(Queue *wait,Queue *park,Stack *turn,int num,int t);
//显示停车场状况
void examine_car(Queue wait,Queue park);


#endif// _QUEUE_H_

Queue.c文件

#include "Queue.h"
#include <stdlib.h>
#include <stdio.h>
//初始化
int Init(Queue *wait,Queue *park,Stack *turn)
{
	QueueNode *newnode1=(QueueNode *)malloc(sizeof(QueueNode) );
	if(NULL==newnode1)
		return FLAST;
	
	newnode1->next=NULL;
	
	park->front=newnode1;
	park->rear=newnode1;
	
	QueueNode *newnode2=(QueueNode *)malloc(sizeof(QueueNode) );
	if(NULL==newnode2)
		return FLAST;
	
	newnode2->next=NULL;
	
	wait->front=newnode2;
	wait->rear=newnode2;
	
	turn->top=NULL;
	turn->sum=0;
}
//主菜单
void Menu(Queue *wait,Queue *park,Stack *turn,int num,int t)
{
	printf("*****************************************\n");
	printf("*         欢迎来到停车场管理系统        *\n");
	printf("*****************************************\n");
	printf("*                请选择                 *\n");
	printf("*****************************************\n");
	printf("*                1.停车:                *\n");
	printf("*                2.离开:                *\n");
	printf("*                3.查看停车场所有情况:  *\n");
	printf("*                4.退出:                *\n");
	printf("*****************************************\n");
	
	int i;
	
	printf("请选择功能\n");
	scanf("%d",&i);
	switch(i)
	{
		case 1:
		{
			park_car(wait,park);
			printf("-------nihao\n");
			Menu(wait,park,turn,num,t);
		}
		break;
		case 2:
		{
			leave_car(wait,park,turn,num,t);
			Menu(wait,park,turn,num,t);
		}
		break;
		case 3:
		{
			examine_car(*wait,*park);
			Menu(wait,park,turn,num,t);
		}
		break;
		case 4:
		{
			printf("停车结束\n");
		}
		break;
		default:
			Menu(wait,park,turn,num,t);
			break;
	}
	
}
//测队列长度
int Length(Queue q)
{
	int i=0;
	while(q.front!=NULL)
	{
		i++;
		q.front=q.front->next;
	}
	return i;
}
//进队列
int Push(Queue *q,int num,int t)
{
	QueueNode *newnode=(QueueNode *)malloc(sizeof(QueueNode) );
	if(NULL==newnode)
		return FLAST;
	
	newnode->infom.number=num;
	newnode->infom.time=t;
	newnode->next=NULL;
	//if(q->rear!=NULL)
	//{
		q->rear->next=newnode;
		q->rear=newnode;
	//}
	//else
	//{
	//	q->rear=newnode;
	///	q->front=newnode;
	//}
	
	return TRUE;
}
//出队列
int Pop(Queue *q,int *num,int *t)
{
	if(NULL==q)
		return FLAST;
	int num1=*num;
	int t1=*t;
	if(q->front==NULL)
	{
		printf("队列以空\n");
		return FLAST;
	}

	num1=q->front->infom.number;
	t1=q->front->infom.time;

	QueueNode *temp=q->front;
	q->front=temp->next;
	free(temp);
	if(q->front==NULL)
		q->rear=q->front;
	
	
	printf("%d,%d\n",num1,t1);
	*num=num1;
	*t=t1;
	
	return TRUE;
}
//停车
void park_car(Queue *wait,Queue *park)
{
	int num;
	int t;
	
	printf("请输入车牌和时间\n");
	scanf("%d%d",&num,&t);
	printf("=======nihao\n");
	if(Length(*park)>SIZE )
	{
		printf("停车场满了\n");
		Push(wait,num,t);
	}
	else
	{
		
		Push(park,num,t);
		//printf("%d,%d\n",park->num,park->t);
	}
}
//进栈
int Push1(Stack *s,int num,int t)
{
	if(NULL==s)
		return FLAST;
	StackNode *newnode1=(StackNode *)malloc(sizeof(StackNode) );
	if(NULL==newnode1)
		return FLAST;
	
	newnode1->data.number=num;
	newnode1->data.time=t;
	
	newnode1->next=s->top;
	s->top=newnode1;
	s->sum++;
	
	return TRUE;
	
}
//出栈
int Pop1(Stack *s,int *num,int *t)
{
	if(NULL==s)
		return FLAST;
	int num2=*num;
	int t2=*t;
	if(s->sum=0)
	{
		printf("栈是空的\n");
		return FLAST;
	}
	num2=s->top->data.number;
	t2=s->top->data.time;
	
	StackNode *temp=s->top;
	s->top=temp->next;
	
	free(temp);
	
	s->sum--;
	*num=num2;
	*t=t2;
	return TRUE;
}
//离开
void leave_car(Queue *wait,Queue *park,Stack *turn,int num,int t)
{
	printf("请输入你要离开的车牌\n");
	
	int j=0;
	int i;
	
	scanf("%d",&i);
	
	QueueNode *head=park->front;
	printf("----ddddd\n");
	while(head!=park->rear)
	{
		if(head->infom.number!=i)
		{
			head=head->next;
			j++;
		}
		else
		{
			break;
		}
		printf("---\n");
	}
	printf("---\n");
	int a=0;
	
	if(j<SIZE)
	{
		while(j!=a)
		{
			printf("------dsdsad\n");
			Pop(park,&num,&t);
			printf("====dsdsad\n");
			Push1(turn,num,t);
			a++;
			//printf("%d,%d",num,t);
		}
		Pop(park,&num,&t);
	}
	else
	{
		printf("没有要离开的车\n");
	}
	while(turn->top!=NULL)
	{
		Pop1(turn,&num,&t);
		Push(park,num,t);
	}
	if(Length(*wait)!=0)
	{
		Pop(wait,&num,&t);
		Push(park,num,t);
	}
}
//显示停车场状况
void examine_car(Queue wait,Queue park)
{
	printf("查看当前停车场状况\n");
	printf("------kk\n");
	printf("停车场共有%d车位,当前停车共有%d辆,等待区共有%d辆\n",SIZE,Length(park),Length(wait) );
	printf("************************************************\n");
	printf("\t车号\t\n");
	
	QueueNode *head1=park.front;
	QueueNode *head2=park.front;
	
	while(head1!=NULL)
	{
		printf("%d\t",head1->infom.number);
		head1=head1->next;
	}
	//printf("\n");
	printf("\t停车时间\t\n");
	
	while(head2!=NULL)
	{
		printf("\t%d",head2->infom.time);
		head2=head2->next;
	}
	printf("\n");
}

main.c文件

#include <stdio.h>
#include "Queue.h"

int main()
{
	Queue park;
	Queue wait;
	Stack turn;
	int num=0;
	int t=0;
	
	
	Init(&wait,&park,&turn);
	Menu(&wait,&park,&turn,num,t);

	return 0;
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值