第三周实验作业----栈和队列

1.学习总结

1.1本周关键字:

1232198-20180407200246936-1906299574.png

2.PTA实验作业

题目1: jmu-字符串是否对称

设计思路:

main函数
{
    定义结构体指针 S`
    定义变量 i=0
    定义字符型变量 ch
    定义 字符型数组指针 str
    初始化 S
    像向str中输入测试样例
    for i=0 to str[i]!='\0'
        str[i]入栈
    判断字符对称
    销毁字符
    return 0
}

初始函数
{
    给S申请存储空间
    令S的为空
}

销毁函数
{
    delete S
}

入栈函数
{
    判断S为栈满
        返回false
    不为栈满
        令S的头指针加一
        将元素传给S
        返回true
}

出栈函数
{
    判断S为空栈
        返回false
    不为空栈
        把S此时的元素给a
        令S的头指针减一
        返回true
}

判断对称函数
{
    定义变量 i
    定义变量 a
    for i=0 to str[i]!='\0'
        将S栈顶元素出栈传给a
            判断str[i]!= a
            打印no
            返回false
        相等
            打印yes
            返回true
} 

代码截图:

1232198-20180415233117213-256902020.png
1232198-20180415233133770-1098154588.png
1232198-20180415233158256-1303514150.png

PTA提交列表说明:

1232198-20180407202356668-562793776.png

段错误:使用while循环导致一直方位不存在的位置。用for循环代替while循环
部分错误:在主函数中输入数据的循环中判断循环结束的标志错误。往数组中输入字符串是末尾有个结束标志‘\0’.

题目2: 符号配对

设计思路:

定义数组 a[],s[],b[],b1[]
定义一个字符型栈

main函数
{
    定义变量k =0,n,count,i,j
    while循环(1)
        判断a[0]为'.'且a的长度为1
            跳出循环
        否则
            输入字符串a
            getchar(a)
            定义变量len等于a的长度
            for i=0 to i<len
                判断op(a[i])
                    将a[i]的值传给s[k++]
                判断a[i]等于'/'并且a[i+1]等于'*'
                    令s[k++]等于<
                    i加一
                判断a[i]等于'*'并且a[i+1]等于'/'
                    令s[k++]等于>
                    i加一
    令n等于k
    count等于0
    for i=0 to i<n
        判断s[i]等于'('或'{'或'['
            s[i]入栈
        判断栈是否为空
            判断Match(S.top(), s[i])为1
                出栈
            否则
                s[i]入栈
        否则
            s[i]入栈
    判断栈为空
        打印YES
    否则
        令k=0
            while循环 栈不为空
                令栈顶元素等于b[k++]
                出栈
        令n=k
        for i=0 to i<n
            令b[n-i-1]等于b[n]
        定义tt等于n-1
        for i=0 to i<tt
            for j=tt to j>i
                判断Match(b1[i], b1[j])或Match(b1[j], b1[i])
                    令b1[i]等于标志字符
                    令b1[j]等于标志字符
                    令tt等于j-1
        定义字符ch
        for i=0 to i<n
            判断b1[i]不等于 特殊字符
                令ch等于b1
                跳出循环
        判断ch等于'(' 打印NO\n(-?\n
        判断ch等于'{' 打印NO\n{-?\n
        判断ch等于'[' 打印NO\n[-?\n
        判断ch等于'/*' 打印NO\n/*-?\n
        判断ch等于')' 打印NO\n)-?\n
        判断ch等于']' 打印NO\n]-?\n
        判断ch等于'}' 打印NO\n}-?\n
        判断ch等于'*/' 打印NO\n*/-?\n
        return 0
}

判断字符函数
{
    判断c等于'('或c等于')'或c等于'{'或c等于'}'或c等于'['或c等于']'
    return 0
}

匹配函数
{
    判断s等于'('并且t等于')'
        return 1
    判断s等于'['并且t等于']'
        return 1
    判断s等于'{'并且t等于'}'
        return 1
    判断s等于'<'并且t等于'>'
        return 1
    否则
        return 0
}

代码截图:

1232198-20180407210434258-1036772619.png
1232198-20180407210439405-1928208968.png
1232198-20180407210457709-1916711373.png
1232198-20180407210519274-1284463928.png
1232198-20180407210510714-1347248099.png
1232198-20180407210525914-1593924355.png

PTA提交列表说明:

1232198-20180407210601376-1939753861.png

编译错误:提交时编译器的语法没改成c++
部分正确:‘/*’这种情况(两个字符组合)的判断条件不对,若此情况,则入栈换成另一个单独的特殊字符,然后那特殊字符判断
答案错误:在对应情况打印是写错了
段错误:输入字符串是使用了while访问了虚假内存,改成for循环

题目3: jmu-报数游戏

设计思路:

main函数
{
    调用gamestart函数
    return 0
}

初始化队列
{
    定义一个队列指针变量q并申请空间
    将队列置空
    队列长度定位100001
    return q
}

入队函数
{
    判断队列是否满了
        打印队列已满
        return 0
    将x赋值给队尾
    将对应下表后移
    return 1
}

出队函数
{
    判断队列为空
        打印error
        return 0
    令指针x指向队首元素
    将队首对应下表后移
    return 1
}

gamestart函数
{
    定义队列指针变量q并初始化
    定义整型count
    定义整型key
    定义整型con
    定义整型cache
    输入count
    输入con
    判断con大于count
        打印错误
        return 0
    将con赋值给cache
    定义i = 1
    while循环 count--
        入队q i++
    while循环 队尾不等于队首
        while循环--con跳过前面的值
            出队 q key
            入队 q key
        判断最后一个不加上空格
            出队 q key
            打印key
            跳出循环
        判断队尾不等于队首
        出队 q key
        打印key
        将cache赋值给con返回原来的值
}

代码截图:

1232198-20180407212314820-2003160574.png
1232198-20180407212320886-1803324246.png
1232198-20180407212329950-856906604.png
1232198-20180407212343134-885424684.png
1232198-20180407212349052-1707758948.png

PTA提交记录说明

1232198-20180407212428670-1909955547.png

部分正确:在判断队空是将判断条件写错((q->front))%(q->MaxSize)==q->rare改为((q->front)+1)%(q->MaxSize)==q->rare

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

3.1栈PTA排名

3.2队列PTA排名

3.3.我的总分:1分

4. 阅读代码

代码贴图:

1232198-20180407214810308-70797736.png
1232198-20180407214815810-312590015.png

功能:火车车厢重排。编号为1,2,……,n的n辆列车顺序进入一个栈式结构的站台。给出这n辆列车开出车站的所有可能次序

优点:1.整体结构清晰,很容易读懂 2.程序变量定义的很明确,各个函数的功能划分很明确

地址:https://gitee.com/Stephen-joker/data_structure/blob/master/%E5%A4%A7%E4%B8%80%E4%B8%8B/%E6%A0%B7%E4%BE%8B.cpp

5. 代码Git提交记录截图

1232198-20180407213313548-1719757630.png1232198-20180415233120048-964838488.png
1232198-20180415233126306-1307114147.png
1232198-20180415233136972-161368251.png
1232198-20180415233141926-1346576773.png
1232198-20180415233144184-188818203.png

转载于:https://www.cnblogs.com/wengjingming/p/8734811.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值