博客作业03--栈和队列
1.学习总结
2.PTA实验作业
2.1 题目1: jmu-字符串是否对称
2.2 设计思路
数组a储存原字符串
while(a[j]){
依次将a[j]入栈到s中
j++}
for k=0 to k<=i{
用b来储存从s中出栈的字符
b和a[k]做比较
如果不一样 说明不对称 break}
如果可以执行到k=i说明可以匹配对称
最后输出
2.3 代码截图
2.4 PTA提交列表说明
本题没有碰到大的问题。
2.1 题目2: jmu-报数游戏
2.2 设计思路
输入m报的数和n总人数
如果m>n输出error
for i=0 to i<n
{ 按顺序入队}
while(1){
算次数,达到m的话就把该数字出队直接输出
如果没有达到,数字就先出对,然后再进队
如果队列的个数<m break}
再把队列中剩下的数输出
2.3 代码截图
2.4 PTA提交列表说明
部分正确:格式错误;最后不能有空格,最后进行特殊情况判断就可以了。
2.1 题目3:银行业务队列简单模拟
2.2 设计思路
创建两个队列p,q
q来存放偶数顾客
p来存放奇数顾客
while(!p.empty()&&(!q.empty()))
{
p输出出队两次
q输出出队一次}
如果p或q队列没有为空
就把剩下的输出完
2.3 代码截图
2.4 PTA提交列表说明
本题没有碰到较大的问题。
3.截图本周题目集的PTA最后排名
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分:155
4. 阅读代码
public class Match {
public static boolean match(String s){
ArrayStack<Character> stack = new ArrayStack<>();
for(int i = 0;i<s.length();i++){
char c = s.charAt(i);
switch (c) {
case ')':
if(!stack.isEmpty() && stack.pop() == '('){
break;
}else{
return false;
}
case ']':
if(!stack.isEmpty() && stack.pop() == '['){
break;
}else{
return false;
}
case '}':
if(!stack.isEmpty() && stack.pop() == '{'){
break;
}else{
return false;
}
default:
stack.push(c);
break;
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
System.out.println(match("{[()]()[{}]}"));
System.out.println(match("{[()]}}"));
}
}
- 该代码的作用是:括号匹配检验
- 算法需要一个栈,在读入字符的过程中,如果是左括号,则直接入栈,等待相匹配的同类右括号;
如果是右括号,与当前栈顶左括号匹配,就将栈顶左括号出栈,如果不匹配则属于不合法的情况。
另外,如果碰到一个右括号,而堆栈为空,说明没有左括号与之匹配,则非法。那么,当字符读完
的时候,如果是表达式合法,栈应该是空的,如果栈非空,那么则说明存在左括号没有相应的右括
号与之匹配,也是非法的情况。