栈与队列实现停车场问题

原创 2018年04月15日 21:23:30

使用栈和队列实现停车场问题

申明:代码我是运行成功了的,但是直接复制粘贴是肯定运行不了的,嘻嘻嘻。没想到吧O(∩_∩)O。那么接下来我将为大家介绍代码内容。

首先,实现栈与队列的基本功能。

实现栈与队列的首要条件便是结构体的配置,以下是带了注释的配置。(我们此处采用的是链表栈已经顺序队列)

队列图示

队列图示

栈图示

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/* 
 * File:   main.c
 * Author: duzhaoteng
 *
 * Created on 2017年10月23日, 下午9:23
 */

#include <stdio.h>
#include <std1ib.h>
#include <malloc.h>  
/*
 * 
 */
typedef int Elem Type;
typedef int QElemType;

typedef struct{
    ElemType *base;//在栈构造之前与销毁之后,base的值为NULL
    ElemT ype *top;
    int stacksize;//储存当前已分配空间,以元素为单位
}SqStack;

typedef struct QNode{
    QElemType data;
    struct QNode *next;
}QNode, *QueuePtr;

typedef struct{
    QueuePtr front;
    Queu ePtr rear;
}LinkQueue;
typedef struct Car{
    int num;
    int pos;
    int addtime;
    int leavetime;
}Car;

接下来就是栈与队列的方法了,初始化,插入,删除,这三个方法是相当重要的。

void InitStack(SqStack *s,int n){
    //构造一个空栈
    s->base = (ElemType *)malloc(n * sizeof(ElemType));
    if (!s->base) 
        exit(0);//储存分配失败
    s->top = s->base;
    s->stack size = n;
    printf("initstack");
}
void InitQueue(LinkQueue *q){
    //构造一个空队列
    q->front = q->rear = (QueuePtr)malloc(sizeof(QNode));//为队头与队尾给予内存
    if(!q->front) 
        exit(0);
    q->front->next = NULL;
    q->fro nt = q- >rear;
    printf("initqueue");
}
void Push(SqStack *s,ElemType e){
    //插入元素e为新的栈顶元素
    *(s->top)++ = e;//将栈顶指针增大一位并赋值为e
    printf("push");

}

void Pop(SqStack *s,ElemType e){
    //若栈不空,则删除S的栈顶元素,用e返回其值
    if(s->top == s->base) 
        return 0;
    e = --(s- >top);//将栈顶指针减小一位并删除e
    printf("pop");
}

void EnQueue(LinkQueue *q,QElemType e){
    QNode *p;//创建一个结点插入
    p = (QueuePtr)malloc(sizeof(QNode));//为结构体给予空间
    if(!p) exit(0);
    p->data = e;
    p- >next = NULL;
    q->rear->ne xt = p;
    q->rear = p;
    printf("enqueue");
}

void DeQueue(LinkQueue *q,QElemType e){
    if(q->front == q- >rear) return 0;//此时队列为空
    QNode *p;
    p = q->front->next;
    e = p->data;
    q->front->nex t = p->next;
    if(q->rear == p) q->rear == q->front;
    free(p);
    printf("dequeue");
}

实现了基本功能以后就是停车场的算法了

int main(int argc, char** argv) {
    int n;//停车场内的最大汽车数量
    int m;//此时停车场正准备停的车
    SqStack s;
    LinkQueue q;
    printf("请设置停车场最大车辆的数:");
    sca nf("%d",&n);
    printf("请设置停车场现实车辆的数:");
    scanf("%d",&m);
    Car car[m];
    printf("请模拟停车场车辆的状况\n");
    for(int i=0;i<m;i++){
        prin tf("请设置汽车牌号码:");
        scanf("%d",&car[i].num);
        printf("请设置此时汽车是否离去:");
        scanf("%d",&car[i].pos);
        printf("请设置汽车入场时间:");
        scanf("%d",&car[i].addtime);
        printf("请设置汽车离场时间:");
        scanf("%d",&car[i].leavetime);
        printf("\n");
    }

    InitStack(&s,n);
    InitQueue(&q);
    for(int j=0;j<m;j++){
            if(j<=n){
                Push(&s,car[j].num);
            }else{
                EnQueue(&q,car[j].num);
            }
    }


    for(int j=0;j<m;j++){
        if(car[j].pos != 1){
            if(j<=n){
                Pop(&s,car[j].num);
            }else{
                DeQueue(&q,car[j].num);
            }
            printf("汽车车牌号为:%d的车离开了.",car[j].num);
            printf("在停车场内停留的时间为:");
            printf("%d",car[j].leavetime_car[j].addtime);
        }
    }
    return 0;

那么以上便是停车场的算法,如果有什么建议可以在about中提出建议

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Tryantking/article/details/79953497

2088-数据结构实验之栈与队列十一:refresh的停车场

#include using namespace std;int main() { int n,t; while(cin >> n >> t) { stackS...
  • ywj_justdoit
  • ywj_justdoit
  • 2017-10-19 19:50:35
  • 118

sdut 2088 数据结构实验之栈与队列十一:refresh的停车场

数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss ...
  • sxy201658506207
  • sxy201658506207
  • 2017-10-14 21:00:14
  • 695

数据结构实验之栈与队列十一:refresh的停车场

Problem Description refresh最近发了一笔横财,开了一家停车场。由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多。当停车场满时,要进入的车辆会进入便道等待,最...
  • gx17864373822
  • gx17864373822
  • 2017-10-12 23:16:41
  • 209

数据结构实践——停车场模拟(栈和队列综合)

本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目。  设停车场是一个可停放n辆汽车的狭长死胡同,南边封口,汽车只能从北边进出(这样的停车场世间少有)。汽车在停车场内按车辆到达时间的先后顺序...
  • sxhelijian
  • sxhelijian
  • 2015-10-05 22:04:54
  • 7951

C语言数据结构之栈与队列的应用(2)

输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。 #include #include #define MAX 20 #define STACKINCRE...
  • qq_26816591
  • qq_26816591
  • 2015-11-02 12:54:11
  • 465

停车场管理问题程序(C++)

  • 2010年06月20日 19:25
  • 2KB
  • 下载

用栈和队列实现的停车场管理系统

停车场管理 问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达 的先后次序停放。若车场满了,车要停在门外的便道上等候,一旦有车走,则便 道上第一辆车进入。当停车场中的车离开...
  • baymin_dly
  • baymin_dly
  • 2017-08-05 14:18:33
  • 401

java栈+队列实现简单的停车场管理问题

问题描述 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。 车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。 如果停车场已放满...
  • dly215011
  • dly215011
  • 2016-11-02 11:58:20
  • 2223

停车场问题 C 栈与队列

  • 2009年06月16日 14:46
  • 4KB
  • 下载

数据结构与算法(C++版):表、栈和队列

前言本系列博客为学习数据结构与算法过程中的原创笔记,其中代码实现基于C++语言。STL中的向量和表在C++语言的库中包含有公共数据结构的实现,这就是众所周知的标准模版库(Standard Templa...
  • u013271326
  • u013271326
  • 2017-06-06 11:37:07
  • 273
收藏助手
不良信息举报
您举报文章:栈与队列实现停车场问题
举报原因:
原因补充:

(最多只允许输入30个字)