- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java数据结构与算法之栈(Stack)设计与实现
栈的抽象数据类型
??栈是一种用于存储数据的简单数据结构,有点类似链表或者顺序表(统称线性表),栈与线性表的最大区别是数据的存取的操作,我们可以这样认为栈(Stack)是一种特殊的线性表,其插入和删除操作只允许在线性表的一端进行,一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。若栈中没有任何元素,则称为空栈,栈的结构如下图:
由图我们可看成栈只能从栈顶存取元素,同时先进入的元素反而是后出,而栈顶永远指向栈内最顶部的元素。到此可以给出栈的正式定义:栈(Stack)是一种有序特殊的线性表,只能在表的一端(称为栈顶,top,总是指向栈顶元素)执行插入和删除操作,最后插入的元素将第一个被删除,因此栈也称为后进先出(Last In First Out,LIFO)或先进后出(First In Last Out FILO)的线性表。栈的基本操作创建栈,判空,入栈,出栈,获取栈顶元素等,注意栈不支持对指定位置进行删除,插入,其接口Stack声明如下:
package com.zejian.structures.Stack;
/**
* Created by zejian on 2016/11/27.
* 栈接口抽象数据类型
*/
public interface StackT {
/**
* 栈是否为空
* @return
*/
boolean isEmpty();
/**
* data元素入栈
* @param data
*/
void push(T data);
/**
* 返回栈顶元素,未出栈
* @return
*/
T peek();
/**
* 出栈,返回栈顶元素,同时从栈中移除该元素
* @return
*/
T pop();
}
顺序栈的设计与实现
??顺序栈,顾名思义就是采用顺序表实现的的栈,顺序栈的内部以顺序表为基础,实现对元素的存取操作,当然我们还可以采用内部数组实现顺序栈,在这里我们使用内部数据组来实现栈,至于以顺序表作为基础的栈实现,将以源码提供。这里先声明一个顺序栈其代码如下,实现Stack和Serializable接口:
/**
* Created by zejian on 2016/11/27.
* 顺序栈的实现
*/
public class SeqStackT implements StackT,Serializable {
private static final long serialVersionUID = -5413303117698554397L;
/**
* 栈顶指针,-1代表空栈
*/
private int top=-1;
/**
* 容量大小默认为10
*/
private int capacity=10;
/**
* 存放元素的数组
*/
private T[] array;
private int size;
public SeqStack(int capacity){
array = (T[]) new Object[capacity];
}
public SeqStack(){
array= (T[]) new Object[this.capacity];
}
//.......省略其他代码
}
代码如下:
/**
* 获取栈顶元素的值,不删除
* @return
*/
@Override
public T peek() {
if(isEmpty())
new EmptyStackException();
return array[top];
}
从栈添加元素的过程如下(更新栈顶top指向):
代码如下:
/**
* 添加元素,从栈顶(数组尾部)插入
* 容量不足时,需要扩容
* @param data
*/
@Override
public void push(T data) {
//判断容量是否充足
if(array.length==size)
ensureCapacity(size*2+1);//扩容
//从栈顶添加元素
array[++top]=data;
}
您可能关注的文档
最近下载
- 【《家庭养育环境评价探究的国内外文献综述3000字》】 .docx VIP
- 一(上)数学必考:100道看图列式+应用题.pdf VIP
- 贵州财经大学 汉语写作与百科知识A卷 2017年考研专业课真题.pdf VIP
- 【家庭养育环境评价探析的国内外文献综述3000字】.docx VIP
- 苏教版(2019) 选择性必修1 课时7 逻辑电路设计(选学) 课件.pptx VIP
- 【GB_T51455-2023】 城镇燃气输配工程施工及验收规范.docx VIP
- 新项目方法验证能力确认报告(固定污染源排放烟气黑度的测定 林格曼烟气黑度图法HJT 398-2007)展示版.pdf VIP
- 县级干部党校培训个人总结.docx VIP
- 《黑白装饰画课件》教学课件.pptx VIP
- 苏教版(2019) 选择性必修1 课时3 两种组合逻辑门——与非门、或非门 课件.pptx VIP
文档评论(0)