1.学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词
- 栈:限制操作的线性表,栈顶,栈底,空栈,栈满,后进先出,出栈,入栈,后缀转中缀,中缀转后缀,后缀表达式求值,回溯法求迷宫问题,对称串问题
- 队:限制操作的线性表,队头,队尾,空队,队满,先进先出,出队,进队,顺序队列,循环队列,打印杨辉三角,迷宫问题,双端队列,排队问题,报数问题
使用思维导图将这些关键词组织起来。
2.PTA实验作业
题目1:7-1 jmu-字符串是否对称
设计思路
主函数输入字符串储存在str数组
调用 symmetry(str)函数{
for i=0 to str[i]!=0{
让str数组的各个字符进栈
}
for i=0 to str[i]!=0{
出栈并把出栈元素依次与str[i++]对比
如果 有一组不相同,则输出“no” 返回false
}
如果循坏正常结束
则输出“yes”
}
代码截图
PTA提交列表说明。
- 段错误是我想检查代码哪里个点错误,但是没有提示,我自己调试,发现用于进栈出栈的s初始化不成功,一旦访问栈s时就非法退出,我查看s->top,然后函数经过初始化函数后s->top还是无法显示,还有就是函数头里面SqStack s 中间多一个空格,导致定义错误
- 改完发现还是错误,还是一样的错误s的结构都显示不了,发现没有用SqStack s没有用&,没有改变s
题目2:7-1 jmu-报数游戏
设计思路
主函数输入n,m
调用num函数{
如果(m>n){
输出error
返回ERROER
}
否则初始化p队列
for i=1 to n{
i进栈
}
while(栈还没满){
出栈一个元素,赋值给e
如果(是第m的整数倍数){
输出e
}
否则将e进栈
}
}
代码截图
PTA提交列表说明
发现只有第一个数正确,后面还有乱码,应该访问了没有赋值的空间,我调试发现
中间直接跳过一个位置进栈了,那就是进栈时尾节点增大和数据存入顺序错了,因为前面i进栈已经有p->rear=(p->rear+1)%Maxsize,意味跳过一个栈点,修改后即正确
题目3:7-2 银行业务队列简单模拟
设计思路
主函数输入a[n]
调用num函数{
初始化两个循环队列p1,p2
for i=0 to n{
遍历a[i];
如果a[i]为奇数 则进p2队列
否则 进p1队列
}
while(p1和p2都没有空){
p1出栈一个元素赋值给e
输出e
p1出栈一个元素赋值给f
输出f
p2出栈一个元素赋值给g
输出g
}
while两个队列若未空{
则出栈赋值给e
输出e
}
}
代码截图
PTA提交列表说明
3.截图本周题目集的PTA最后排名
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分:
4. 阅读代码
/*报数问题*/
# include <cstdio>
# include <queue>
using namespace std;
queue <int> q;
int main (void)
{
int n;
scanf ("%d", &n);
for (int i = 0; i < n; i++)
{
//初始化队列
q.push(i+1);
}
while (! q.empty())
{
//打印队首元素
printf ("%d ", q.front());
//抛弃首元素
q.pop();
//把队首元素加到队尾
q.push(q.front());
//抛弃队首元素
q.pop();
}
return 0;
}
- 代码简单,而且可读性好,主要是运用c++的STL队列
- 代码Git提交记录截图