java stack 从1.5开始?_java数据结构与算法之栈(Stack)设计与实现
本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点:
栈的抽象数据类型
栈是一种用于存储数据的简单数据结构,有点类似链表或者顺序表(统称线性表),栈与线性表的最大区别是数据的存取的操作,我们可以这样认为栈(Stack)是一种特殊的线性表,其插入和删除操作只允许在线性表的一端进行,一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。若栈中没有任何元素,则称为空栈,栈的结构如下图:
由图我们可看成栈只能从栈顶存取元素,同时先进入的元素反而是后出,而栈顶永远指向栈内最顶部的元素。到此可以给出栈的正式定义:栈(Stack)是一种有序特殊的线性表,只能在表的一端(称为栈顶,top,总是指向栈顶元素)执行插入和删除操作,最后插入的元素将第一个被删除,因此栈也称为后进先出(Last In First Out,LIFO)或先进后出(First In Last Out FILO)的线性表。栈的基本操作创建栈,判空,入栈,出栈,获取栈顶元素等,注意栈不支持对指定位置进行删除,插入,其接口Stack声明如下:
packagecom.spring.test;/*** 栈接口抽象数据类型*/
public interface Stack{/*** 栈是否为空
*@return
*/
booleanisEmpty();/*** data元素入栈
*@paramdata*/
voidpush(T data);/*** 返回栈顶元素,未出栈
*@return
*/T peek();/*** 出栈,返回栈顶元素,同时从栈中移除该元素
*@return
*/T pop();
}
packagecom.spring.test;importjava.io.Serializable;importjava.util.EmptyStackException;/*** Created by Administrator on 2018/3/9.*/
public class SeqStack implements Stack,Serializable {private static final long serialVersionUID = -5413303117698554397L;/*** 栈顶指针,-1代表空栈*/
private int top=-1;/*** 容量大小默认为10*/
private int capacity=10;/*** 存放元素的数组*/
privateT[] array;private intsize;public SeqStack(intcapacity){
array= (T[]) newObject[capacity];
}publicSeqStack(){
array= (T[]) new Object[this.capacity];
}public intsize(){returnsize;
}
@Overridepublic booleanisEmpty() {return this.top==-1;
}/*** 添加元素,从栈顶(数组尾部)插入
*@paramdata*/@Overridepublic voidpush(T data) {//判断容量是否充足
if(array.length==size)
ensureCapacity(size*2+1);//扩容//从栈顶添加元素
array[++top]=data;
size++;
}/*** 获取栈顶元素的值,不删除
*@return
*/@OverridepublicT peek() {if(isEmpty())newEmptyStackException();returnarray[top];
}/*** 从栈顶(顺序表尾部)删除
*@return
*/@OverridepublicT pop() {if(isEmpty()){newEmptyStackException();
}
size--;return array[top--];
}/*** 扩容的方法
*@paramcapacity*/
public void ensureCapacity(intcapacity) {//如果需要拓展的容量比现在数组的容量还小,则无需扩容
if (capacity
}
T[] old=array;
array= (T[]) newObject[capacity];//复制元素
for (int i=0; i
array[i]=old[i];
}
}
}
packagecom.spring.test;/****/
public classEqualsToHashcodeTest {public static voidmain(String[] args) {
SeqStack s = new SeqStack();
s.push("a");
s.push("B");
s.push("C");int l =s.size();
System.out.println("size-->"+s.size());//size在减少,必须先记录
for(int i=0;i
System.out.println("s.pop"+s.pop());
}
System.out.println("s.peek-->"+s.peek());
}
}
链式栈的设计与实现
了解完顺序栈,我们接着来看看链式栈,所谓的链式栈(Linked Stack),就是采用链式存储结构的栈,由于我们操作的是栈顶一端,因此这里采用单链表(不带头结点)作为基础,直接实现栈的添加,获取,删除等主要操作即可。其操作过程如下图:
从图可以看出,无论是插入还是删除直接操作的是链表头部也就是栈顶元素,因此我们只需要使用不带头结点的单链表即可。代码实现如下,比较简单,不过多分析了:
java stack 从1.5开始?_java数据结构与算法之栈(Stack)设计与实现相关推荐
- Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...
本文实例讲述了java数据结构之链表.栈.队列.树的实现方法.分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查. 一.线性表(链表) 1.节 ...
- java数据结构与算法之双链表设计与实现
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/53047590 出自[zejian的博客] 关联文章: java数据结 ...
- 数据结构与算法之栈入门题目
数据结构与算法之栈题目 目录 用数组实现大小固定的队列和栈 实现一个特殊的栈,在实现栈的基础功能上,再实现返回栈中最小元素的操作 如果仅用栈结构实现队列结构和如何仅用队列结构实现栈结构 1. 用数组实 ...
- 数据结构与算法--简单栈实现及其应用
栈 栈(Stack)是一种限制插入和删除只能在一个位置上进行的表,改位置是表的末端,叫做栈顶top.栈的基本操作有push (进栈)pop(出栈) 栈又叫做LIFO(后进先出)表,下图展示普通push ...
- C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划
C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...
- 数据结构与算法--利用栈实现队列
利用栈实现队列 上一节中说明了栈的特点 后进先出,我们用数组的方式实现了栈的基本操作api,因此我们对栈的操作是不考虑排序的,每个api的操作基本都是O(1)的世界,因为不考虑顺序,所以找最大,最小值 ...
- 新星计划Day7【数据结构与算法】 栈Part1
新星计划Day7[数据结构与算法] 栈Part1
- java树的基本知识_Java数据结构和算法(二)树的基本操作
Java数据结构和算法(二)树的基本操作 一.树的遍历 二叉树遍历分为:前序遍历.中序遍历.后序遍历.即父结点的访问顺序 1.1 前序遍历 基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子 ...
- java数据结构 队列_Java数据结构与算法[原创]——队列
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本文介绍数据结构中的队列(queue)的概念.存储结构.队列的特点,文末给出ja ...
最新文章
- 谈谈你对面向过程与面向对象的理解
- CentOS使用virt-what知道虚拟机的虚拟化技术
- 利用Linux系统生成随机密码的10种方法
- 多态性——vptr和vtable
- 达摩院里的女Leader,一面温柔似水一面灿烂如阳
- C#利用反射实现动态加载程序集简单案例
- 终于修好了MacBook
- windows和linux如何通信,别总是把Windows和Linux混为一谈
- 【Vue.js 知识量化】ES6 语法积累
- matlab p q的确定,基于MATLAB软件的P-Q分解法潮流计算 (1)
- BUG: button点击高亮延迟问题
- 空间中点到直线的距离
- LCD显示--TM1640芯片驱动程序
- 微分中值定理 (罗尔、拉格朗日、柯西)
- 249PHP等于多少钱,一百万新台币等于多少人民币
- java RandomAccess 遍历效率
- Hadoop-kms总结
- 编程乐趣:获取12306的所有车站电报码
- DNS服务器IP地址大全
- 探秘SLAM之RANSAC算法
热门文章
- linux服务器安全文档,CentOS Linux服务器安全设置
- 合肥php开发培训费用,合肥PHP开发培训之PHP文件基础操作
- MyBatis 的执行流程,写得太好了!
- Spring-Retry重试实现原理
- 这款可视化工具,Java 调优起来真的 so easy啊
- 成为阿里 P7 真的难么?
- Spring Boot微服务中Chaos Monkey的应用
- TypeError: Class advice impossible in Python3. Use the @Implementer class decorator instead
- OpenglES2.0 Android:画矩形
- struct.error: 'h' format requires -32768 number 32767