zoukankan      html  css  js  c++  java
  • 博客作业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提交记录截图
  • 相关阅读:
    hihoCoder #1176 : 欧拉路·一 (简单)
    228 Summary Ranges 汇总区间
    227 Basic Calculator II 基本计算器II
    226 Invert Binary Tree 翻转二叉树
    225 Implement Stack using Queues 队列实现栈
    224 Basic Calculator 基本计算器
    223 Rectangle Area 矩形面积
    222 Count Complete Tree Nodes 完全二叉树的节点个数
    221 Maximal Square 最大正方形
    220 Contains Duplicate III 存在重复 III
  • 原文地址:https://www.cnblogs.com/soyam/p/8834360.html
Copyright © 2011-2022 走看看