现在的位置: 首页 > 综合 > 正文

停车场问题

2013年07月02日 ⁄ 综合 ⁄ 共 3926字 ⁄ 字号 评论关闭

问题描述:

设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理

问题理解:

在调度过程中,道路是一个队列停车场是一个栈,同时要建立一个临时停车场park2.

代码如下:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<memory.h>
typedef struct CarNode
{
    int data;
    time_t in_time;
    time_t out_time;
    struct CarNode *next;

}CarNode,*ptrCarNode;
typedef struct CarParking
{
    int n;
    int size;
    struct CarNode *top;
    //struct CarNode *bottom;
}CarParking,*ptrCarParking;
//路旁的队列
typedef struct CarRoad
{
    struct CarNode *front;
    struct CarNode *back;
}CarRoad,*ptrCarRoad;
//初始化队列
void init_Road(ptrCarRoad carp)
{
    carp->front=carp->back=NULL;
}
int empty_Road(ptrCarRoad carp)
{
    if(carp->front==NULL)
        return 1;
    else
        return 0;
}
//插入队列
void insert_Road(ptrCarRoad carp,ptrCarNode newCar)
{
    newCar->next=carp->back;
    if(empty_Road(carp))
       {
            carp->front=newCar;
       }
       carp->back=newCar;
}
//出队操作
ptrCarNode pop_Road(ptrCarRoad carp)
{
    ptrCarNode ret =carp->front;
    if(carp->front->next==NULL)
        carp->back=NULL;
    carp->front=carp->front->next;
    return ret;
}
//初始化
void init_parking(ptrCarParking carp)
{

    carp->n=0;
    carp->top=NULL;
}
//进入栈
void insert_parking(ptrCarParking carp,ptrCarNode newCar)
{
    // newCar->data=in;
    newCar->next=carp->top;
    carp->top=newCar;
    carp->n++;
}
//判空
int empty_parking(ptrCarParking carp)
{
    if(carp->n==0)
        return 1;
    else
        return 0;
}
//判满
int full_parking(ptrCarParking carp)
{
    if(carp->n==carp->size)
        return 1;
    else
        return 0;
}
//出站
ptrCarNode  pop_parking(ptrCarParking carp)
{
    // newCar->data=in;
    ptrCarNode ret;
    carp->n--;
    ret=carp->top;
    carp->top=carp->top->next;
    return ret;

}

//进入请求
void ReqestIn(ptrCarParking parking,ptrCarRoad road,ptrCarNode node)
{
    //道路为空
    if(!empty_Road(road))
    {
        printf("\troad is not empty\n");
        insert_Road(road,node);
    }
    //停车场已满
    else if(full_parking(parking))
    {
        printf("\tPark is not empty Car %d park in road\n",node->data);
        insert_Road(road,node);
    }
    else
    {
        time(&node->in_time);
        printf("\tCar %d is in parking\n",node->data);
        insert_parking(parking,node);
    }
}
//出停车场
ptrCarNode ReqestOut(ptrCarParking parking,ptrCarRoad road,int n)
{
    //返回节点 ret,
    ptrCarNode ret,top2;
    ptrCarParking park2;
    ret=NULL;
    park2=(ptrCarParking)malloc(sizeof(CarParking));
    init_parking(park2);
    while(!empty_parking(parking))
    {
        top2=pop_parking(parking);
        if(top2->data==n)
        {
            //找到n
            printf("\tfind %d at position :%d\n",n,parking->n+1);
            ret=top2;
            time(&ret->out_time);
            break;
        }
        insert_parking(park2,top2);
    }
    //所有车重新进入车场
    while(!empty_parking(park2))
    {
        insert_parking(parking,pop_parking(park2));
    }
    free(park2);
    //将道路上的车进入车场
    while(!full_parking(parking)&&!empty_Road(road))
    {
        top2=pop_Road(road);
        time(&top2->in_time);
        insert_parking(parking,top2);
    }
    return ret;
}
//显示menu
void menu()
{

        printf("\t********************************************************\n");
        printf("\t*                                                      *\n");
        printf("\t*       1 I want to parking                            *\n");
        printf("\t*                                                      *\n");
        printf("\t*       2 I want to leave                              *\n");
        printf("\t*                                                      *\n");
        printf("\t*       3 I want to quit                               *\n");
        printf("\t*                                                      *\n");
        printf("\t********************************************************\n");
}
int main()
{
    ptrCarParking aaa;
    ptrCarNode in;
    ptrCarNode in2;
    ptrCarRoad road;
    time_t rawtimet;
    struct tm* timeinfo;
    road=(ptrCarRoad)malloc(sizeof(CarRoad));
    init_Road(road);
    aaa=(ptrCarParking)malloc(sizeof(CarParking));
    init_parking(aaa);
    menu();
    printf("\tinput the capability of the parking : ");
    scanf("%d",&aaa->size);
    //system("cls");
    while(1)
    {
        char choice;
        system("cls");
        menu();
        printf("\t choose what you want to do:");
        fflush(stdin);
        choice=getchar();
        if(choice == '1')
        {
            system("cls");
            menu();
            in=(ptrCarNode)malloc(sizeof(CarNode));
            printf("\t input the your car number : ");
            scanf("%d",&in->data);
            ReqestIn(aaa,road,in);
        }
        else if(choice=='2') 
        {
            int n;
            system("cls");
            menu();

            printf("\tinput the your car number : ");
            scanf("%d",&n);
            in=ReqestOut(aaa,road,n);
            if(in!=NULL)
            {
                rawtimet=in->out_time-in->in_time;
                timeinfo = localtime ( &rawtimet );
                printf("\tCar %d parking time:%d:%d",in->data,timeinfo->tm_min,timeinfo->tm_sec);
            }

        }
        else if(choice=='3')
        {
            exit(0);
        }
        fflush(stdin);
        getchar();
    }
    return  0;
}

代码下载地址:http://download.csdn.net/detail/jiutoushe2008/6442125

抱歉!评论已关闭.