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

1.学习总结

1.1本周关键字:

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
} 

代码截图:



PTA提交列表说明:

段错误:使用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
}

代码截图:






PTA提交列表说明:

编译错误:提交时编译器的语法没改成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返回原来的值
}

代码截图:





PTA提交记录说明

部分正确:在判断队空是将判断条件写错((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. 阅读代码

代码贴图:


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

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

地址:https://gitee.com/Stephen-joker/data_structure/blob/master/大一下/样例.cpp

5. 代码Git提交记录截图





posted @ 2018-04-07 20:59  Stephen-joker  阅读(422)  评论(3编辑  收藏  举报