数据结构与算法(Java描述)-6、栈的基本概念以及顺序栈的实现
2017-10-21 10:13
519 查看
一、堆栈的基本概念
堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作。
堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈
从输入和输出数据元素的位置关系看,堆栈的功能和一种火车调度装置的功能类同。
二、堆栈抽象数据类型
数据集合
堆栈的数据集合可以表示为a0,a1,…,an-1,每个数据元素的数据类型可以是任意的类类型。
操作集合
(1)入栈push(obj):把数据元素obj插入堆栈。
(2)出栈pop():出栈, 删除的数据元素由函数返回。
(3)取栈顶数据元素getTop():取堆栈当前栈顶的数据元素并由函数返回。
(4)非空否notEmpty():若堆栈非空则函数返回true,否则函数返回false。
三、顺序栈
顺序存储结构的堆栈称作顺序堆栈。
顺序堆栈的存储结构示意图如图所示。
四、顺序栈实现
//设计Stack接口
public interface Stack {
//入栈
public void push(Object obj) throws Exception;
//出栈
public Object pop() throws Exception;
//得到栈顶元素
public Object getTop() throws Exception;
//判断栈是否为空
public boolean isEmpty();
}
拓展:
Java中栈与堆的区别:
栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量。在java中,所有基本类型和引用类型都在栈中存储。栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域)。
堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),C中的malloc语句所产生的内存空间就在堆中。在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象。所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用。
hashCode与对象之间的关系:
如果两个对象的hashCode不相同,那么这两个对象肯定也不同。
如果两个对象的hashCode相同,那么这两个对象有可能相同,也有可能不同。
判断两个对象是否相同,只有一种方法,就是使用==符号。
堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作。
堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈
从输入和输出数据元素的位置关系看,堆栈的功能和一种火车调度装置的功能类同。
二、堆栈抽象数据类型
数据集合
堆栈的数据集合可以表示为a0,a1,…,an-1,每个数据元素的数据类型可以是任意的类类型。
操作集合
(1)入栈push(obj):把数据元素obj插入堆栈。
(2)出栈pop():出栈, 删除的数据元素由函数返回。
(3)取栈顶数据元素getTop():取堆栈当前栈顶的数据元素并由函数返回。
(4)非空否notEmpty():若堆栈非空则函数返回true,否则函数返回false。
三、顺序栈
顺序存储结构的堆栈称作顺序堆栈。
顺序堆栈的存储结构示意图如图所示。
四、顺序栈实现
//设计Stack接口
public interface Stack {
//入栈
public void push(Object obj) throws Exception;
//出栈
public Object pop() throws Exception;
//得到栈顶元素
public Object getTop() throws Exception;
//判断栈是否为空
public boolean isEmpty();
}
//实现SquenceStack public class SquenceStack implements Stack{ //对象数组 Object stack[]; //栈顶 int top; //默认最大长度 private final int defalutSize=10; //最大长度 int maxSize; //无参构造方法 public SquenceStack() { init(defalutSize); } //指定最大长度的构造方法 public SquenceStack(int size) { init(size); } //初始化 public void init(int size) { this.maxSize=size; this.top=0; stack=new Object[size]; } @Override public void push(Object obj) throws Exception { if(top==maxSize) { throw new Exception("堆栈已满!"); } stack[top]=obj; top++; } @Override public Object pop() throws Exception { if(isEmpty()) { throw new Exception("堆栈为空,不能删除!"); } top--; return stack[top]; } @Override public Object getTop() throws Exception { if(isEmpty()) { throw new Exception("堆栈为空!"); } return stack[top-1]; } @Override public boolean isEmpty() { return top==0; } }
拓展:
Java中栈与堆的区别:
栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量。在java中,所有基本类型和引用类型都在栈中存储。栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域)。
堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),C中的malloc语句所产生的内存空间就在堆中。在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象。所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用。
hashCode与对象之间的关系:
如果两个对象的hashCode不相同,那么这两个对象肯定也不同。
如果两个对象的hashCode相同,那么这两个对象有可能相同,也有可能不同。
判断两个对象是否相同,只有一种方法,就是使用==符号。
相关文章推荐
- 数据结构与算法(Java描述)-11、串的基本概念以及串存储结构
- 数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现
- java数据结构与算法之树基本概念及二叉树(BinaryTree)的设计与实现
- java数据结构与算法之树基本概念及二叉树(BinaryTree)的设计与实现
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- 链表的java实现以及基本的增加,删除,排序操作
- OS中 main.h 的一些基本概念 以及 类与对象的概念及其实现
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- Redis缓存系统(1)Java-Jedis操作Redis,基本操作以及 实现对象保存
- B-树的基本概念以及代码实现
- 集合的概念、类型、接口以及接口的实现类的方法描述
- 动态规划---实现输出最大公共子序列的长度以及输出最大子字符串(java语言描述)
- 该文简要描述了DOM概念和内部逻辑结构,给出了DOM文档操作和XML文件互相转换java实现过程。
- 磁盘系统基本概念以及磁盘的顺序读写与随机读写
- java常用的数组、字符串、集合操作以及数据结构与算法基本知识
- 【数据拾遗(java描述)】--- 哈夫曼树的基本实现
- Redis缓存系统(一)Java-Jedis操作Redis,基本操作以及 实现对象保存
- 快速排序概念以及js、java的实现
- 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
- Ajax基本概念以及JS实现Ajax的过程