博客作业03--栈和队列

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 我的总分:

  • 76+80=156

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队列
  1. 代码Git提交记录截图
posted @ 2018-04-14 20:15  Soyam  阅读(218)  评论(1编辑  收藏  举报