数据结构之堆栈的链式存储
来源:互联网 发布:诺基亚5320软件下载? 编辑:程序博客网 时间:2024/06/07 02:28
在数据结构之堆栈的顺序存储一文中,讲述了堆栈的顺序存储,并指出了顺序存储的局限性。本文讲述堆栈的另一种存储方式:链式存储。
堆栈的链式存储(链栈)是链表的一种表现形式,依然遵循堆栈的“先进后出”这一基本原则。链栈的最小单元是结点,一个结点包含数据域和指针域两个部分。链式存储结构如下图:
图a:堆栈中有一个结点,数据域为A,指针域为null,此时top指向该结点;
图b:向链栈中压入数据域为B的结点,此时堆栈中有两个结点,数据域为A的结点为栈底,数据域为B的结点为栈顶,此时top指向栈顶;
图c:向链栈中压入数据域为C的结点,此时堆栈中有三个结点,数据域为A的结点为栈底,数据域为C的结点为栈顶,此时top指向栈顶;
图d:从栈中弹出数据域为C的栈顶元素,并将top指向结点C的指针域指向的结点B;
图e:从栈中弹出数据域为B的栈顶元素,并将top指向结点B的指针域指向的结点A。
按照面向对象设计的原则,链栈中包括两个对象:一个为结点对象,一个为栈对象。
结点类如下:
public class Node {private Object data;private Node next;//构造函数public Node() {this.data = null;this.next = null;}//构造函数重载public Node(Object data) {this.data = data;this.next = null;}public Node(Object data, Node next) {this.data = data;this.next = next;}//读结点数据public Object getData() {return data;}//写结点数据public void setData(Object data) {this.data = data;}//获取结点链接的下一个点public Node getNext() {return next;}//设置结点链接的下一个点public void setNext(Node next) {this.next = next;}}
链栈类如下:包含判断链栈是否为空、压入元素、弹出栈顶元素、获取栈顶元素等操作。由于链栈可以根据元素数目动态分配内存空间,链栈可以看做有无穷多个空间,除非内存满了。因此,在链栈类中并没有定义判断栈满的操作。
public class LinkHeap {/** * 定义并初始化栈顶结点 */private Node topNode = null;/** * 判断链栈是否为空栈 * * @return 如果链栈为空栈,返回true;否则返回false */public boolean isEmpty() {return topNode == null;}/** * 将数据压入链栈 * * @param data 压入链栈的数据 */public void push(Object data) {Node p = new Node(data, topNode);topNode = p;}/** * 弹出栈顶元素 * * @return 如果链栈为空栈,返回空值;否则返回栈顶结点的数据域 */public Object pop() {if(isEmpty()) {return null;}else {Object data = topNode.getData();topNode = topNode.getNext();return data;}}/** * 获取链栈的栈顶元素 * * @return 如果链栈为空栈,返回空值;否则返回栈顶结点的数据域 */public Object get() {return isEmpty() ? null : topNode.getData();}}链栈的操作的时间复杂度很低,上述四种方法的时间复杂度均为O(1)。
0 0
- 数据结构之堆栈的链式存储
- 数据结构学习之堆栈的链式存储C++实现
- 数据结构学习之堆栈(链式存储)
- 数据结构:堆栈的链式存储实现
- c 堆栈的链式存储
- 堆栈的链式存储实现
- 常用数据结构之链式存储的栈
- 数据结构之线性表的链式存储
- 数据结构之栈的链式存储结构
- 数据结构之堆栈的顺序存储
- 堆栈的链式存储(链表)
- 堆栈的相关操作_链式存储
- 2.2.3 堆栈的链式存储实现
- 数据结构--链式堆栈
- 数据结构《链式栈的存储》
- 数据结构的链式存储结构
- 数据结构 - 栈的链式存储
- 数据结构的链式存储结构
- 创建第一个Android应用程序
- virtual box 设置了双向复制而不能复制可能因为虚拟网卡没启动
- 数据库范式(1NF 2NF 3NF BCNF)详解
- oracle排序后获取第一条数据
- opnet的simple_source模块学习
- 数据结构之堆栈的链式存储
- Android开发之Sqlite数据库
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(三) 流水线结构线程池设计
- C++大文件传输
- VC运行时库/MD、/MDd、/MT、/MTd说明
- 系统启动时,数据动态加载业务若干思考
- 淘宝校招笔试题2
- mac下使用和登录ssh云服务
- Javascript通过bind()掌控this