堆栈的基本概念
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Hteoapd
Hteoapd 2
1∧
(c) 一个元素入栈
Hteoapd==null (e) 最后一个元素出栈后,栈为空11
链式堆栈类的设计
链式堆栈类的设计需要用到链表的表述,所以前面学的Node类、Stack接口就成为重 要的实现依据。 Node类是实现链式结构的必须;Stack接口是保证链式堆栈具备堆栈 基本功能的保障。具体实现代码如下:
4
❖ 从输入和输出数据元素的位置关系 看,堆栈的功能和一种火车调度装置的 功能类同。
火车头1
火车头2
火车头1
火车头2
(a)
(b)
(c)
这一点恰好反映了堆栈的定义特色:每一次进栈的数据都存放在当前栈顶元素 之前而成为新的栈顶;每一次出栈的元素都是当前的栈顶元素。于是:最后进 栈的元素总是最先出栈的元素——LIFO
1
主要内容
❖ 4.1 堆栈 ❖ 4.2 堆栈的应用 ❖ 4.3 队列 ❖ 4.4 优先级队列
2
本讲主要知识点:
● 堆栈的基本概念,堆栈的用途 ● 顺序堆栈类的设计方法,链式堆栈类的设计方法 ● 队列的基本概念,队列的用途 ● 顺序循环队列的基本实现原理,顺序循环队列的队空
和队满判断方法,顺序循环队列类的设计方法 ● 链式队列类的设计方法 ● 优先级队列的概念,优先级队列的用途,顺序优先级
(1)入栈push(obj):把数据元素obj插入堆栈。 (2)出栈pop():出栈, 删除的数据元素由函数返回。 (3)取栈顶数据元素getTop():取堆栈当前栈顶的数据元 素并由函数返回。 (4)非空否notEmpty():若堆栈非空则函数返回true,否 则函数返回false。
6
堆栈抽象数据类型的Java接口定义
第四讲:堆栈和队列
堆栈和队列都是特殊的线性表。线性表、堆栈和队列三者 的数据元素以及数据元素之间的逻辑关系完全相同。差别 是:
线性表的插入和删除不受任何限制,而堆栈只能在栈顶插 入和删除数据。队列只能在队尾插入,队头删除。
堆栈和队列都可以分别用顺序存贮结构和链式存贮结构存 贮。
堆栈和队列在各种类型的软件中应用非常广泛,堆栈可以 用来完成数据序列的特定转换,队列可以作为数据元素的 缓冲存贮。
考虑到数据元素既可以整体进栈再整体出栈,还可以部分进栈,部分出栈,再 部分进栈,部分出栈,所以堆栈可以完成比较复杂的数据元素序列的转换任务!
5
❖ 4.1.2 堆栈抽象数据类型
❖ 1数据集合 堆栈的数据集合可以表示为a0,a1,…,an-1,每个数据元
素的数据类型可以是任意的类类型。 ❖ 2操作集合
SeqStack myStack = new SeqStack();
int test[] = {1, 3, 5, 7, 9}; int n=5;
try{ for(int i = 0; i < n; i ++) myStack.push(new Integer(test[i]));
System.out.println("当前栈顶元素为:" + myStack.getTop ());
public SeqStack(){ initiate(defaultSize);
}
public SeqStack(int sz){
initiate(sz);
}
8
顺序堆栈类的测试
public class SeqStackTest{
public static void main(String[] args){
size ++;
12
}
链式堆栈类的测试
public class LinStackTest{
public static void main(String[] args){
查看测试结果
9
❖ 4.1.4 链式堆栈 链式存储结构的堆栈称作链式堆栈。
❖ 1 链式堆栈的存储结构 和单链表相同,链式堆栈也是由一个个结点
组成的,每个结点由两个域组成,一个是存放数 据元素的数据元素域element,另一个是存放指 向下一个结点的对象引用(即指针)域next。
堆栈有两端,插入数据元素和删除数据元素 的一端为栈顶,另一端为栈底。链式堆栈都设计 成把靠近堆栈头head的一端定义为栈顶。
public class LinStack implements Stack{
Node head; int size;
public void LinStack(){ head = null; size = 0;
}
public void push(Object obj){
head = new Node(obj, head);
}
7
顺序堆栈类的设计
由于前面已经给出了堆栈的接口定义,所以设计具体的顺序堆 栈类实现了这个接口,就能使得定义的顺序堆栈类具有堆栈的 基本功能。
public class SeqStack implements Stack{ final int defaultSize = 10; int top;// Object[] stack; int maxStackSize;
public interface Stack
{
public void push(Object obj) throws
Exception;
public Object pop() throws
Exception;
public Object getTop() throws
Exception;
public boolean notEmptwenku.baidu.com();
队列的入队列和出队列操作设计方法
3
4.1 堆栈
❖
4.1.1 堆栈的基本概念 堆栈(也简称作栈)是一种特殊的线性表,堆栈的
数据元素以及数据元素间的逻辑关系和线性表完全相同, 其差别是线性表允许在任意位置进行插入和删除操作,而 堆栈只允许在固定一端进行插入和删除操作。
堆栈中允许进行插入和删除操作的一端称为栈顶, 另一端称为栈底。堆栈的插入和删除操作通常称为进栈或 入栈,堆栈的删除操作通常称为出栈或退栈。
10
依次向链式堆栈入栈数据元素a0, a1, a2, ..., an-1后, 链式堆栈的示意图如图所示。
栈顶
栈底
head
an1
an2
...
a0 ∧
Hteoapd==null
data next
Hteoapd
1∧
(a) 栈状态为空
(b) 第一个元素入栈 Hteoapd
Hteaodp 2
1∧
(d) 一个元素出栈