顺序堆栈的设计
为首的,只变动的是top,用Object[]定义stack
用public void push(Object obj)来定义含有参数Object obj(用于后续塞入Object[] 对象的stack)
让stack[top]=obj;
top++
Q:链式表中的取数如何操作?——几个数据类型串联起来比较分析\
此处定义的getTOP(),由于之前的均有top++,所以在没有进行push()的stack[top]=obj的加成,此时为空
那么取数,类似于顺序表和链式表中getData(i)操作
所以取数也是return stack[top-1]
链式堆栈的设计
Q1:head.data的数值是什么?是top嘛?还是最底部的东西
Q2:head.data是干什么的?
重点关注pop的差别
Q3:之前咋没在链式表里边见到过这么活跃的
链式堆栈的head理解为顺序堆栈的top,那么一切都顺理成章了
让head.data的数值变动到Object类对象obj上(obj=top,obj=curr.data)
堆栈的应用:括号匹配问题
一种类似于消消乐的算法,匹配了则pop()两者一起消失,落单了则单独push()
Q1:这俩换成SeqStack和LinStack都可以吗?
元素的存取格式难道没有差别?链式也有exp[i]?
对于几种读取符号的情况考虑,因为我们在意的只有三类括号,其实很好通过筛选符完成
对于左侧的三类括号,检测到了我们巨使用xxx.push(xx[i])进行入栈
条件为利用if判断(((xxx[i].equals(new String("("))),在嵌入||或的符号,其他几个equals()同理如此使用)
再使用else if对如下几种情况进行并列处理
首先统一处理pop()的情况,也就是正好发生匹配的时候
这个时候需要进行两步判断,一个是xxx[i].euqals,一个是xxxStack.getTop().equals()
是否满足栈内的xxxStackxxxeuqals右括号,等式的xx[i].euqals为左括号
剩下的判断左右括号匹配次序的标准格式也是同理,只不过内部用的不同而已
对比一下堆栈和队列的初始符号的设置差异
Q4:判断这几个是否成立的几个互通的表达式
入队列
让对象obj进入data[]队列的第rear个元素中
由于循环的产生,其递增表示为(rear+1)%maxSize
count用来记录元素个数(也可以用rear和front来推算)
出队列
Object temp=data[front]
front=(front+1)%maxSize
count--
return temp
Q5:substring是干什么的?
Q6:delete()
Q7:判断不应该是getTop()么
首先使用SeqStack和SeqQueue进行定义
并使用动态的str.length作为其内部的空间大小
开始将字符逐个转化
利用队列中的xx.append()
和
堆栈中的xxpush()
其中内部的转化为str.substring(i,i+1)
然后再进行对比
利用equals连接队列类对象的.delete()和堆栈类对象的pop()
Q8:跟队列有啥关系?我不用队列的话有啥影响吗?
堆栈类的设计
链式堆栈
堆栈类应用-括号匹配问题
前缀表达式和后缀表达式
顺序循环队列的设计
回文表达式
模拟操作管理系统