第03次作业-栈和队列
Posted 木桐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第03次作业-栈和队列相关的知识,希望对你有一定的参考价值。
1.学习总结
到现在为止,已经学习了数据结构绪论、线性表、栈和队列等知识点。尝试使用思维导图将这些碎片化的概念、知识点组织起来。使用Xmind画出知识点及知识点之间的联系。步骤如下:
1.1 写出你认为本周学习中比较重要的知识点关键词,如逻辑结构、栈、队列、存储结构
等。
1.2 使用思维导图将这些关键词组织起来。
2.PTA实验作业
1、题目1:7-1 jmu-字符串是否对称
编写一个算法利用顺序栈判断一个字符串是否是对称串。所谓对称串是指从左向右读和从右向左读的序列相同。
2.设计思路:
bool symmetry(ElementType str[]) { 定义栈指针st ElementType变量e for i=0 to str[i]=\'\\0\' str[i]进栈 end for for i=0 to str[i]=\'\\0\' { 出栈 if 正逆序不相等 return false; } 销毁栈。 return true; }
3.代码截图(主要函数)
4.PTA提交列表说明
错误原因:str数组可能和data数组大小不统一。
解决方法:将其大小改成MaxSize。
1、题目2:7-2 符号配对
请编写程序检查C语言源程序中下列符号是否配对:/*
与*/
、(
与)
、[
与]
、{
与}
。
2.设计思路:
定义变量flag=1,i 定义字符变量e和str数组 while(输入每一行字符) { if(str[0]为\'.\'且str[1]为\'\\n\') break; for i=0 to str[i]=\'\\0\' { if str[i]为\'(\' 或者 str[i]为\'[\' 或者 str[i]为\'{\' str[i]入栈 if str[i]为\'/\'且str[i+1]为\'*\' { 将两个都入栈并且i+2 } if str[i]为\')\' { if 栈不为空且s->next->data为\'(\' 出栈 else { 将str[i]赋值给c flag=0; break; } } if str[i]为\']\' { if 栈不为空且s->next->data==\'[\' 出栈 else { 将str[i]赋值给c flag=0; break; } } if str[i]为\'}\' { if 栈不为空且s->next->data==\'{\' 出栈 else { 将str[i]赋值给c flag=0; break; } } if str[i]为\'*\'且str[i+1]为\'/\' { if 栈不为空且s->next->data==\'*\' { 出栈 if 栈不为空且s->next->data==\'/\' 出栈 else { 将str[i]赋值给c flag=0; break; } } else { 将str[i]赋值给c flag=0; break; } } } } if flag==1且栈不为空 return true; else return false; }
3.代码截图(主要函数)
4.PTA提交列表说明
错误原因:括号匹配成功的条件判断错误。写代码的时候写成两个*所以错了
解决方法:将其条件由栈不为空改为当栈为空时return true。将第二个*改成/就对了。
1、题目3:7-1 jmu-报数游戏
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。要求用队列结构完成。输出数字间以空格分隔,但结尾不能有多余空格。
2.设计思路:
void baoshu(SqQueue *Q,int m) { 定义变量cnt计数 定义ElemType e while(队列不为空) { for cnt=1 to m { 出队 入队 } 出队且输出e if(队列不为空) { cout<<" "; } } }
3.代码截图(主要函数)
4.PTA提交列表说明
3.截图本周题目集的PTA最后排名
本次2个题目集总分:125+215=340分
必做题共:205分
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分:205
得分:2
4. 阅读代码
代码功能:堆栈模拟队列
优点:代码简洁,思路清晰。
#include <iostream> #include <stack> #include <string> using namespace std; stack<int> staIn, staOut; int main() { int n1, n2; cin>>n1>>n2; if(n1 > n2) n1 = n2; string s; while(cin>>s, s != "T") { if(s == "A") { int t; cin>>t; if(staIn.size() == n1) { if(staOut.size() > 0) { cout<<"ERROR:Full"<<endl; continue; } int i; for(i = 0; i < n1; ++i) { staOut.push(staIn.top()); staIn.pop(); } } if(staIn.size() < n1) staIn.push(t); else { cout<<"ERROR:Full"<<endl; continue; } } else if(s == "D") { if(staOut.size() == 0) { if(staIn.size() == 0) { cout<<"ERROR:Empty"<<endl; continue; } int i, size = staIn.size(); for(i = 0; i < size; ++i) { staOut.push(staIn.top()); staIn.pop(); } } cout<<staOut.top()<<endl; staOut.pop(); } } return 0; }
代码地址:https://blog.csdn.net/a418382926/article/details/21635879
5. 代码Git提交记录截图
以上是关于第03次作业-栈和队列的主要内容,如果未能解决你的问题,请参考以下文章