数据结构——栈—— 链式栈(附java实现)
来源:互联网 发布:las数据 编辑:程序博客网 时间:2024/06/05 14:59
通过上一篇文章对顺序栈做了介绍,线性表分为顺序表和链表两种,与此相似,栈也分为顺序栈和链栈。
链栈与顺序栈外在的功能看起来以前,符合栈顶基本性质LIFO,但是在内部实现原理上我想大家一定从名称上就能够区分开,顺序栈元素之间的物理地址是相邻的,而链栈元素之间的物理地址再逻辑上是相邻的,链栈存在空栈的情况,但是不存在溢出(只要内存足够大),也就是说链栈的大小是没有限制的。实现链式栈和顺序栈的操作都是需要常数时间,即时间复杂度为O(1),主要从空间和时间两个方面考虑。
初始是,顺序栈需要事先声明顺序栈的长度,当堆栈不满时,造成了一定空间上的浪费,而链式栈的长度可变且长度不需要事先声明,相对比较节省空间,但是在每个节点中设定了一个指针域,从而产生了结构开销。当需要多个堆栈共享时,顺序存储中可以充分利用顺序栈的单向延伸性,可以使用一个数组存储两个堆栈,使每个堆栈从各自的端点向中间延伸,这样浪费的空间就会减少,但只有两个堆栈之间有相反的需求时才会有效,反之则会出现堆栈溢出。但是如果存在多个堆栈共享空间,其中一个共享栈满的时候其他共享栈可能还没有满,这样就需要将满栈中的元素向右或向左平移,这个过程会造成比较大的时间开销。
共享栈
链式栈的java实现:
public class LinkStack {private Node top;/** * 构造方法 * */public LinkStack(){top = new Node();}/** * 清空操作 * */public void clear(){top = new Node();}/** * 压栈操作 * */public void push(Object object){Node node = new Node();node.setObject(object);node.setNext(top.getNext());top.setNext(node);}/** * 出栈操作 * */public Node pop(){if(top.getNext() == null){System.out.println("Stack is Empty!");return null;}Node returnNode = top.getNext();top.setNext(top.getNext().getNext());return returnNode;}/** * 判断为空 * */public boolean isEmpty(){return (top.getNext() == null) ? true : false;}}class Node {private Object object;private Node next;public Node(){this.next = null;this.object = null;}public Object getObject() {return object;}public void setObject(Object object) {this.object = object;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}}
- 数据结构——栈—— 链式栈(附java实现)
- 数据结构(五)——双链表、链式栈、链式队列 及实现
- 数据结构(三)——双链表、链式栈、链式队列 及实现
- 数据结构——链式栈
- 数据结构——链式栈
- 数据结构——链式栈(c++)
- 数据结构——链式栈模板类实现
- 数据结构——栈—— 顺序栈(附java实现)
- 数据结构——栈之链式存储
- 数据结构小结——链式栈
- 数据结构栈(链式实现)
- 数据结构之栈(链式存储)——C++模板类实现
- 数据结构——队列的链式实现(C语言)
- 数据结构学习----链式栈(Java实现)
- 《数据结构》严蔚敏版(java解)——第三章 栈和队列02 链式栈操作
- 《数据结构》严蔚敏版(java解)——第三章 栈和队列04 链式队列操作
- 数据结构——链式队列(c++)
- 数据结构——链式基数排序
- ios开发scrollView中contentSize、contentInset和contentOffset区别
- 跨站脚本(Cross-Site-Script,XSS)
- com连接点事件浅析
- linux command4
- 010 editor 注册码
- 数据结构——栈—— 链式栈(附java实现)
- 对于Extjs4中的tree无法显示根节点的问题
- Bootstrap3.0学习第九轮:CSS补充
- 报表控件NCReport教程:集成NCReport到Qt应用程序中
- 在Windows系统上安装与使用Android NDK r5
- Android.mk
- 数据库导入导出-11g10g
- javascript的数据类型
- Solr学习总结-改进Solr性能