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提交记录截图
  • 相关阅读:
    es6模块与 commonJS规范的区别 Linda
    hive 子查询特别分析
    C语言I博客作业05
    C语言I博客作业08
    2019秋作业第一周作业
    C语言I博客作业04
    C语言I博客作业09
    C语言I博客作业03
    C语言I博客作业07
    C语言I博客作业06
  • 原文地址:https://www.cnblogs.com/soyam/p/8834360.html
Copyright © 2011-2022 走看看