您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法(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();
}

//实现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相同,那么这两个对象有可能相同,也有可能不同。
判断两个对象是否相同,只有一种方法,就是使用==符号。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐