DS博客做业03--栈和队列

1.本周学习总结

  • 这周是栈和队列的学习,二者的原理简单而且c++STL对queue和stack类进行了包装,使用起来很是方便。因此通常使用问题不大,不过用于解决更深层次的问题,还须要更好的理解栈和队列。
  • 栈至关于一个单口容器,后放的在上面,当取出时就要先取出上面的,因此是后进先出。队列则像是一头进一头出的队伍,先排到队列的先出来。栈能够用于实现深度优先搜索,队列则能够用于实现广度优先搜索。同时,二者还能够结合巧妙解决逆转,表达式转换或者求值等问题。c++

    2.PTA实验做业

2.1.题目1:6-2 在一个数组中实现两个堆栈

2.1.1设计思路

在CreateStack函数中为结构体和数组分配好内存,push函数先判断堆栈是否满,而后根据Tag对相应堆栈进行输入
pop函数先根据Tag判断对那个堆栈操做,而后再进行判断是否为空,不空就出栈。

2.1.2代码截图

2.1.3本题PTA提交列表说明


Q1:输出搞错了,尽是没有输出Tag没有输出算法

Q2:没赋值直接用Mystack->MaxSize数组

2.2.题目2:6-12 jmu-ds-舞伴问题

假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不一样,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你须要用队列操做实现上述算法。请完成下面5个函数的操做。函数

2.2.1设计思路

男女所有分别入队,而后先男出队,后女出队,直到至少一队为空。

2.2.2代码截图



2.2.3本题PTA提交列表说明


Q1:函数都比较简单可是多须要细心处理,因此有小错误学习

2.3.题目1:7-3 符号配对

请编写程序检查C语言源程序中下列符号是否配对://、(与)、[与]、{与}。设计

2.3.1设计思路

左括号入栈,右括号就取栈顶配对,根据配对结果输出。若是最后栈空即为配对成功。

2.3.2代码截图



2.3.3提交列表



Q1:一个输出写错一直没发现。
Q2:对/和*判断处理不够细心,循环要移动两次3d

2.4.题目1:7-7(选作) 银行排队问题之单窗口“夹塞”版

排队“夹塞”是引发你们强烈不满的行为,可是这种现象时常存在。在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,全部顾客按到达时间排成一条长龙。当窗口空闲时,下一位顾客即去该窗口处理事务。此时若是已知第i位顾客与排在后面的第j位顾客是好朋友,而且愿意替朋友办理事务的话,那么第i位顾客的事务处理时间就是本身的事务加朋友的事务所耗时间的总和。在这种状况下,顾客的等待时间就可能被影响。假设全部人到达银行时,若没有空窗口,都会请求排在最前面的朋友帮忙(包括正在窗口接受服务的朋友);当有不止一位朋友请求某位顾客帮忙时,该顾客会根据本身朋友请求的顺序来依次处理事务。试编写程序模拟这种现象,并计算顾客的平均等待时间。code

2.4.1设计思路

建一个结构体,包括名字,到达时间,办理时间,朋友圈,而后输入数据创建链表,而后链表第一个数据入队列,再遍历剩下链表节点,若是发现某节点名字在第一个数据的朋友圈中而且在朋友办理事务以前到达就入队,把入队的节点所有删除,重复操做,直到链表为空,就意味着处理完毕。blog

2.4.2代码截图





2.4.3提交链表


Q1:没有考虑好空闲时间和第一个客户不是0分到达的状况队列

三、栈和队列上机考试

题目一:6-3 jmu-ds-表达式求解

输入一个后缀表达式,程序求出表达式值。



错误缘由:

  • 没有考虑负数 解决:在判断数字的同时判断数字前边有没有负号
相关文章
相关标签/搜索