第三周实验作业----栈和队列
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提交记录截图