java数据结构与算法之栈(Stack)设计与实现教程.doc

java数据结构与算法之栈(Stack)设计与实现教程.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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; }

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档