博客作业03--栈和队列

本文分享了一周内关于栈和队列的学习心得,包括关键概念、典型应用案例如字符串对称性判断、报数游戏及银行业务队列模拟等,并通过PTA平台进行实践练习。

1.学习总结

1.1 写出你认为本周学习中比较重要的知识点关键词

  • 栈:限制操作的线性表,栈顶,栈底,空栈,栈满,后进先出,出栈,入栈,后缀转中缀,中缀转后缀,后缀表达式求值,回溯法求迷宫问题,对称串问题
  • 队:限制操作的线性表,队头,队尾,空队,队满,先进先出,出队,进队,顺序队列,循环队列,打印杨辉三角,迷宫问题,双端队列,排队问题,报数问题

    使用思维导图将这些关键词组织起来。

  • 1232265-20180414181919833-883180578.png

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” 

} 

代码截图

1232265-20180414154735205-1491646384.png

PTA提交列表说明。

1232265-20180414154900529-1606500204.png

  • 段错误是我想检查代码哪里个点错误,但是没有提示,我自己调试,发现用于进栈出栈的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进栈 
    }
} 

代码截图

1232265-20180414161805119-1761755360.png

PTA提交列表说明

1232265-20180414161841736-428388181.png

  • 1232265-20180414162103195-1133585566.png
    发现只有第一个数正确,后面还有乱码,应该访问了没有赋值的空间,我调试发现
  • 1232265-20180414162416316-852172126.png
    中间直接跳过一个位置进栈了,那就是进栈时尾节点增大和数据存入顺序错了,因为前面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 
    } 

} 

代码截图

1232265-20180414164345492-86669380.png

PTA提交列表说明

1232265-20180414164612572-148309542.png

  • 本体没有问题

3.截图本周题目集的PTA最后排名

3.1 栈PTA排名

1232265-20180414164849525-853747747.png

3.2 队列PTA排名

1232265-20180414164942732-1482263611.png

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提交记录截图
    1232265-20180414201508926-1871237971.png

转载于:https://www.cnblogs.com/soyam/p/8834360.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值