博客作业03--栈和队列
1.学习总结
1.1写出你认为本周学习中比较重要的知识点关键词
逻辑结构:简单来说是数据与数据间关系的一种形式,主要有以下几类,1.集合 2.线性结构 3.树形结构 4.图形结构, 其中3和4也称为非线性结构
存储结构:把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示称为顺序存储结构。
栈:是一种只能在一端进行插入或删除操作的线性表,遵从后进先出原则,分为栈的顺序存储结构和栈的链式存储结构
队列:是一种操作受限的线性表,其限制为仅允许在表的一端进行插入,而在表的另一端进行删除,有队列的顺序存储结构(包括1.顺序队 2.环形队)和队的链式存储结构
串:是由零个或多个字符组成的有限序列,分为顺序串和链串,经典模式匹配法有BF算法和KMP算法
1.2 使用思维导图将这些关键词组织起来
2.PTA实验作业
2.1 .1题目1:题目名称:栈7-3 表达式转换
2.1.2 设计思路(伪代码或流程图)
while(从中缀表达式exp中读取字符ch)
{ ch为数字:将后续的所有数字存放入postexp栈中,并以#标志结束
ch为左括号‘(’:将此括号进栈到op
ch为右括号‘)’:将op中出栈时遇到的第一个左括号‘(’以前的运算符依次出栈并存放到opstexp中,然后将‘(’出栈
ch为‘+’或‘-’:出栈运算符并存放到postexp中,直到栈空或者栈顶为‘(’,然后将‘+’或‘-’进栈op
如果ch为‘-’且前一个字符为‘(’,则将‘-’进栈op再将‘!’进栈 说明:!是用来标记为负数时候的情况
如果ch为‘+’且前一个字符为‘(’,则读取下一个字符ch,说明:不需要把这个'+'号再入栈,就把它当做判断正数的标志,接着跳过它,读取下一个字符
ch为‘*’或‘/’:若栈顶为‘*’或‘/’,出栈,直到栈顶不是‘*’或*/,否则入栈
ch为小数点‘.’:将其进栈postexp
}
若exp扫描完毕,则将op中的所有运算符一次出栈并存放到postexp中
while(从postexp栈中读取ch)
{ ch为‘#’:输出空格,如果ch为最后一个字符,则不输出
ch为数字:直接输出
ch为‘-’:如果后一个字符为‘!’,直接输出‘-’
否则先输出‘-’,再输出空格
ch为‘+’:如果ch为第一个元素,则直接输出不带空格
否则输出后再输出空格
ch为‘*’或‘/’:输出ch后再输出空格
ch为‘.’:输出ch
}
2.1.3 代码截图
2.1.4 PTA提交列表说明
错误:除一个字符是‘+’外要输出,其余表示正数的‘+’不需要输出,但还是输出了,例子如下,只需输出16即可,不需要再输出‘+’号
改正:如果ch为‘+’且前一个字符为‘(,则能说明此‘+’号并不是运算符,而是表示接下来的数是个正数,所以跳过该字符,不需将其进栈op即可
2.2.1题目2:队列题目名称:jmu-ds-舞伴问题
2.2.2设计思路(伪代码或流程图)
n为总人数 m为报数
for i=1 to n
将1到n的数字依次存放进队列q
end for
while(遍历队列q)
{ 如果队列元素的下标为m的倍数且不为最后一个,则取出该元素,输出后再输出空格
如果队列元素的下标为m的倍数且为最后一个,则取出该元素,输出该元素
如果队列元素的下标不为m的倍数,则将其存入队列q的队尾
}
2.2.3代码截图
2.2.4PTA提交列表说明
分析:本题虽然是一次就过了,但是调试过程中还是有碰到问题
问题:没有分析最后一次输出的情况,导致末尾仍然带有空格,接下来以#为标志测试结果,明显依旧输出了空格
解决方法:调试发现最后一次输出时q.front==q.rear,以此为条件设特例,在此条件下直接输出元素,不需要带空格,再以#为标志测验,正确
2.3.1题目3:题目名称:7-2 银行业务队列简单模拟
2.3.2设计思路(伪代码或流程图)
for i=0 to n
将编号存放进输出a[i]
如果a[i]为奇数,存放进队列A
否则存放进队列B
end for
while(遍历队列A,B)
{
count存放当前业务人数,n为业务总人数
如果B队列为空,则输出所有A队列的元素,最后一个不带空格,n为1时,输出不带空格
如果A队列为空,则输出所有B队列的元素,最后一个不带空格,n为1时,输出不带空格
如果count为3的倍数,则从B队列中取出元素,并且输出,再输出空格,count满人则不需要输出空格
否则从A队列中取出元素,并且输出,再输出空格,count满人则不需要输出空格
}
2.3.3代码截图
2.3.4PTA提交列表说明
错误:格式错误,跟上题类型相同,也是末尾带空格的问题,只不过是在A队列为空或者B队列为空这个特殊性下实现
解决方法:特例解决,如果n为1时,则输出元素,不需再输出空格
3.截图本周题目集的PTA最后排名
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分:205
4. 阅读代码
public class SortStackByStack{
public static void sortStackByStack(Stack<Integer> stack){
Stack<Integer>help=new Stack<Integer>();
while(!stack.isEmpty()){
int cur=stack.pop();
while(!help.isEmpty()&&help.peek()<cur){
stack.push(help.pop());
}
help.push(cur);
}
while(!help.isEmpty()){
stack.push(help.pop());
}
}
}