C/C++知识点之关于经典停车场问题指针输出乱码问题?
小标 2019-02-19 来源 : 阅读 631 评论 0

摘要:本文主要向大家介绍了 C/C++知识点之关于经典停车场问题指针输出乱码问题?,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了 C/C++知识点之关于经典停车场问题指针输出乱码问题?,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C/C++知识点之关于经典停车场问题指针输出乱码问题?

邀请好友加入腾讯云自媒体分享计划
给好友发送邀请链接,好友成功加入计划后你和好友都分别获得 30 / 100 / 180 元云服务器代金
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
struct stackstruct                     /栈的结构体/
{
int id;
int time;
struct stackstruct pre;
struct stackstruct 
next;
};


struct queuestruct //队列结构体
{
int id;
struct queuestruct *next;
};


struct stackstruct stackhead1, stackend1;
struct stackstruct stackhead2, stackend2;
struct queuestruct queuehead, queueend;
int stack1count, stack2count;            /栈中元素总数/
int queuecount;                         /队列中元素总数/


void push(int flag, struct stackstruct p)
{
struct stackstruct 
stack;
if (flag == 0)                  /栈1进栈操作/
{
if (stack1count == 0)//栈1空
{
stackhead1 = (struct stackstruct )malloc(sizeof(struct stackstruct));
stackhead1->id = p->id;
stackhead1->time = p->time;
stackhead1->next = NULL;
stackhead1->pre = NULL;
stackend1 = stackhead1;
}
else
{
stack = (struct stackstruct 
)malloc(sizeof(struct stackstruct));
stack->id = p->id;
stack->time = p->time;
stackend1->next = stack;
stack->pre = stackend1;
stack->next = NULL;
stackend1 = stack;
}
stack1count++;
}
else if (flag == 1)               /栈2进栈操作,栈1出栈/
{
if (stack2count == 0)//栈2空
{
stackhead2 = (struct stackstruct )malloc(sizeof(struct stackstruct));
stackhead2->id = p->id;
stackhead2->time = p->time;
stackhead2->next = NULL;
stackhead2->pre = NULL;
stackend2 = stackhead2;
}
else
{
stack = (struct stackstruct 
)malloc(sizeof(struct stackstruct));
stack->id = p->id;
stack->time = p->time;
stackend2->next = stack;
stack->pre = stackend2;
stack->next = NULL;
stackend2 = stack;
}
stack2count++;
}
}


struct stackstruct pop(int id, int time)
{
struct stackstruct 
stack;
stack = (struct stackstruct *)malloc(sizeof(struct stackstruct));


if (stackend1->id != id)
{
    stack->id = stackend1->id;
    stack->time = stackend1->time;
    stack->pre = stackend1->pre;
    stackend1=NULL;
    stackend1 = stack->pre;
    stackend1->next = NULL;
    stack1count--;
}
else
{
    stack->id = stackend1->id;
    stack->time = stackend1->time;
    stack->pre = stackend1->pre;
    printf("%d号汽车出停车场\n",id);
    printf("停车场停留时间: %d\n",time - stack->time);
    printf("应该缴纳的费用(单价: 5): %d\n", 5 * (time - stack->time));
    stackend1=NULL;
    if (--stack1count == 0)
        stackend1 = stackhead1 = NULL;
    else
    {
        stackend1 = stack->pre;
        stackend1->next = NULL;
    }
    stack = NULL;
}
return stack;


}


struct stackstruct pop1()//栈2元素出栈
{
struct stackstruct 
stack;
stack = (struct stackstruct *)malloc(sizeof(struct stackstruct));


stack->id = stackend2->id;
stack->time = stackend2->time;
stack->pre = stackend2->pre;
free(stackend2);
stackend2 = stack->pre;
stack2count--;

return stack;


}


void Enqueue(struct stackstruct p)//入队
{
struct queuestruct 
queue;
if (queuecount == 0)
{
queuehead = (struct queuestruct )malloc(sizeof(struct queuestruct));
queuehead->id = p->id;
queuehead->next = NULL;
queueend = queuehead;
}
else
{
queue = (struct queuestruct 
)malloc(sizeof(struct queuestruct));
queue->id = p->id;
queue->next = NULL;
queueend->next = queue;
queueend = queue;
}
queuecount++;
}


struct stackstruct Dequeue(int time)//出队
{
struct stackstruct 
stack;
stack = (struct stackstruct *)malloc(sizeof(struct stackstruct));


stack->id = queuehead->id;
stack->time = time;
if (--queuecount == 0)
{
    queuehead = NULL;
    queueend = NULL;
}
else
    queuehead = queuehead->next;
return stack;


}
int main()
{
int n;
char s = {0};
struct stackstruct p;
printf("输入狭长通道可停放汽车数量: ");
scanf_s("%d", &n);
getchar();
stack1count = stack2count = queuecount = 0;
p = (struct stackstruct 
)malloc(sizeof(struct stackstruct));
printf("输入停车信息:(动作,车牌号,时间)\n");
while (scanf_s("%c,%d%d", &s,1, &p->id, &p->time) != EOF)
{
if (s =='E')
{
printf("End");
break;
}
if (s =='A')                /汽车到达/
{
if (stack1count < n)                 /栈未满,进栈操作/
{
push(0, p);
printf("%d号汽车进入停车场\n",p->id);
printf("进入停车场时间: %d\n",stackend1->time);
printf("停车位置: %d\n",stack1count);
}
else                                /栈满,进队列操作/
{
Enqueue(p);
printf("%d号汽车进入便道\n",p->id);
printf("进入便道时间: %d\n",p->time);
printf("便道位置: %d\n",queuecount);
}
}
if (s =='D')                /汽车离去/
{
struct stackstruct *temp;
while ((temp = pop(p->id, p->time)) != NULL)
{
push(1, temp);
}
while (stack2count != 0)
{
push(0, pop1());
}
if (queuecount != 0)
{
push(0, Dequeue(p->time));
printf("%d号汽车进入停车场\n",stackend1->id);
printf("进入时间: %d\n",stackend1->time);
printf("停车位置: %d\n",stack1count);
}
}
}
return 0;
}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程