数据结构-第3章-课本程序

 顺序堆栈的设计
为首的,只变动的是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:跟队列有啥关系?我不用队列的话有啥影响吗?

堆栈类的设计

 

 链式堆栈

 

 

 堆栈类应用-括号匹配问题

 

 

 前缀表达式和后缀表达式

 

 顺序循环队列的设计

 

 回文表达式

 

 

 模拟操作管理系统

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值