第03次作业-栈和队列

1.学习总结

使用思维导图将数据结构绪论、线性表、栈和队列等知识点组织联系起来。

2.PTA实验作业 

2.1题目1

2.2.1思路

1.首先就是把串全部读进来,合成一个大串。(把/**/ 改成<>代替)

2.然后再对新生成的串处理,读入左括号,直接压入栈顶。

 如果读入的是右括号:

(1)如果栈为空,那么缺少与之对应的左括号。

(2)如果栈顶元素与之不匹配,那么缺少与栈顶元素相匹配的右括号。

处理完之后,如果栈为空,则表示完全匹配,如果有剩余,那么就是缺少右括号。
因为是输出第一个缺少的,所以直接输出栈尾的元素就可以。

2.2.2伪代码

 2.3 代码截图

2.4 PTA提交列表说明

一开打出来的代码鲁棒性不是很好,有两个错误,知道了但解决不了

然后我又重新打了一遍

测试点5还是没过,应该是输出第一个不匹配的括号,不成功,还有/*(*/)竟然也是不匹配的

然后重新整理思路再重打了下才成功。

2.1题目2

2.2.1思路

1.堆栈a和b,更长的用做出队,短的用做入队


(1)判队满:如果a满且b不为空,则队满
(2)判队空:如果a和b都为空,则队空
2.入队
    判队满否?
(1)栈a若不满,则直接压入栈a
(2)若a满,则将a中的所有元素弹出到栈b中,
    然后再将元素入栈a
3.出队:
    判对空否?
(1)若b空就将a中的所有元素弹出到栈b中,然后出栈
(2)b不空就直接从b中弹出元素

2.2.2伪代码

2.3 代码截图

2.4 PTA提交列表说明

这道问题难度在入如何用栈模拟队列的想法实现,这道题一开始不太有思路,一位大佬提醒了我下进行分类讨论,以及一个模拟出栈,一个入栈

后面才明白,多种错误的产生是开始某些地方没实现好,挺好改出来的。

 2.1题目3

2.2.1思路

1.如果窗口的时间小于等于用户的到来的时间

    时间添加到对应窗口,窗口处理客户数量增加
    
2.如果所有窗口时间都大于用户的到来的时间

    寻找时间的最小的窗口,时间添加到最小的窗口
    窗口处理客户数量增加,判断等待时间最大的 

 2.2.2伪代码

2.3 代码截图

2.4 PTA提交列表说明

一开始用编译器选择C导致编译错误,后面部分是一个循环条件没写好。

此题对应的一道外加VIP服务的情况

我在此题上面进行修改,发现有一个问题一直解决不了,就是等待的人有VIP(不是第一个)并且VIP窗口时间最小

如何先处理VIP的情况解决不了

我会在这次博客之后把这个问题解决的。

3.截图本周题目集的PTA最后排名

总分:2.5(选做题只做部分)

4. 阅读代码

《算法之美》の链表问题の获得链表中倒数第m个元素

地址:请点击楼上小标题哦!

问题:

给定一个单向链表,设计一个时间优化并且空间优化的算法,找出该链表的倒数第m个元素。实现您的算法,注意处理相关的出错情况。

m定义为当m=0时,返回链表最后一个元素。

解答:

这是一个难题,因为单向链表只能正向遍历,这个问题需要根据元素与链表尾的相对位置来找出该元素,

但是当发现链表尾时,没有简单的办法回溯到倒数第m个元素。

我的思考:此题的难点在于就是时间复杂度的问题

优点:深入的对算法的效率进行了分析,研究出效率高的代码。

5. 代码Git提交记录截图

原文地址:https://www.cnblogs.com/guangguangge/p/8732360.html