第03次作业-栈和队列
一、学习总结
1.我认为的本周学习中比较重要的知识点关键词
逻辑结构、栈、队列、存储结构
2.思维导图
(1)绪论
(2)顺序表
(3)栈和队列
二、PTA实验作业
题目一、7-2 符号配对
1.题目要求
2.设计思路
定义字符串 c 存放待匹配符号 定义字符栈 s 做匹配处理 定义 i,k 控制循环 将字符串输入并存入a,逐个判断a中的字符是否为 while(1){ if 输入的是结束标志 then 结束循环 输入字符串a for(i=0;i<a.size();i++) if a[i]是符号 then 存入b else if a[i]是/* then 将<存入b且i+1 else if a[i]是*/ 将>存入b且i+1 end 定义 n=k; for i=0 to nif b[i]等于[、{、(或< then 将b[i]入栈 else if 栈不为空 if 栈顶元素与此时的b[i]匹配 then 将栈顶出栈 else 将b[i]入栈 else 将b[i]入栈
end for
if 栈空 then输出YES else{ 输出NO 重置k=0 while 栈不空 将栈中元素逐个放入c中 将c数组中的元素逐个比较 for i=0 to k-1
for j=i+1 to kif 匹配 then c[i]c[j]都置为0 for i=0 to kif c[i]等于(、[、{ then输出c[i]-? 结束循环 else if c[i]等于'<' then输出/*-? 结束循环 else if c[i]等于'>' then输出?-*/ 结束循环 else if c[i]等于)、]、} then输出?-c[i] 结束循环 end
3.代码截图
4.PTA提交列表说明
错误点:在缺右边或缺左边时会出现错误。
解决方法:我多输入了几组测试数据,发现结果时而正确时而错误。后来发现在判断符号是否匹配的函数(if_match函数)中,我只判断了()、{ }、[ ]、/* */这些情况,忽略了反过来也照样配对的情况。所以最后我在if_match函数中de条件循环的条件中补充了这些判断,结果就正确了。
题目二:7-1 jmu-报数游戏
1.题目要求
2.设计思路
void number(int i,int n) { if n大于i 输出error! else{ 定义i,j控制循环 定义length保存队列长度 定义元素类型的元素e 创建队列q for j=1 to i 将j入队
end for while 队列长度大于n 一个元素出队并存放到e中且k+1 if k等于n then 输出e 并重置k为零 else 将e入队 计算此时队列长度 } while 长度不为零 一个元素出队并存放到e中 if 队长为1 then 输出e else 输出e(空格) 长度减一 }
3.代码截图
4.PTA提交列表说明
错误点:m<n时,答案错误
未修改前: 正确结果应是:
修改方法:在number函数中第一个while循环结束的标志是队列长度小于给定n,在这个while循环里,我先计算了队列长度再进行其他操作,导致其他操作对队列长度的影响要在下一次while循环中才能体现,所以出现了上述错误。修改方法是将计算队列长度的运算式放在while循环内的最后一条语句。
题目三、7-3 银行排队问题之单队列多窗口服务
1.题目要求
2.设计思路
定义数组 wintime 存放各个窗口的等待时间 定义数组 winnum 存放各个窗口的顾客数 定义 sumwait为总的等待时间,lenwait为最长的等待时间,wait为单次等待时间 (全初置为零) while 栈不为空 定义 minwait最快的完成时间(先设为无穷大),minindex为最快完成时间的下标(初值为零) 定义 flag 标记变量 for i=0 to k 遍历k个窗口 if 队列首位,到达时间比完成时间大,就代表不需要等待 then 更新完成这个窗口完成的时间 窗口人数加一 标记一下,代表不需要等待 队首元素出队 结束循环 if 需要等待 then 记录各个窗口里最快完成的那个窗口的完成时间,和下标 end for if需要等待 then 等待的时间等于最快完成的时间减去队列第一个人到达的时间 if最长等待时间小于等待时间不断更新等待的最长时间 then更新等待的最长时间 求等待时间的和 更新对应窗口的完成时间 对应窗口人数++ 队首元素出队 end while 定义 maxtime为最大完成时间(初置为wintime[0] for i=0 to k if 最大完成时间小于wintime[i] then更新最大完成时间 end for
3.代码截图
4.PTA提交列表说明
三、本周题目集的最后排名
3.1栈PTA排名
3.2队列PTA排名
3.3我的总分
2分
四、代码阅读
代码功能:判断带头结点的循环双向链表中的数据结点是否对称
优点:代码条理简单清晰
代码地址:https://gitee.com/QueGuangRenChen/data_structure/blob/master/chpt02/6-5.cpp
五、代码Git提交记录截图