什么是堆栈,关于这个名词,我在百度,google搜索了半天,也没有发现一个比较权威的解释,还有许多资料语焉不详,就以维基百科的解释为准吧,和我记忆中的一致。

堆栈(英文:stack),中国大陆作堆栈,台湾作堆叠,在计算机科學中,是一種特殊的串列形式的資料結構,它的特殊之處在於只能允許在鏈結串列或陣列的一端(稱為堆疊頂端指標,英文為top)進行加入資料(push)和輸出資料(pop)的運算。另外堆疊也可以用一維陣列或連結串列的形式來完成。堆疊的另外一個相對的操作方式稱為佇列。

由於堆疊資料結構只允許在一端進行操作,因而按照後進先出(LIFO, Last In First Out)的原理運作。

堆疊資料結構使用兩種基本操作:推入(push)和彈出(pop):

推入(push) :將數據放入堆疊的頂端(陣列形式或串列形式),堆疊頂端top指標加一。

彈出(pop) :將頂端數據資料輸出(回傳),堆疊頂端資料減一。

下面是用java 链表 实现堆栈

/**

* 表示链表的一个节点

* @author Adair

*/

public class Node{

Object element;

Node next;

public Node(Object element) {

this(element, null);

}

public Node(Object element, Node n) {

this.element = element;

next = n;

}

public Object getElement() {

return element;

}

public void setElement(Object element) {

this.element = element;

}

public Node getNext() {

return next;

}

public void setNext(Node next) {

this.next = next;

}

}

/**

* 用链表实现堆栈

* @author Adair

*/

public class ListStack

{

Node header; //栈顶元素

int elementCount;// 栈内元素个数

int size;// 栈的大小

/**

* 构造函数,构造一个空的堆栈

*/

public ListStack()

{

header = null;

elementCount = 0;

size = 0;

}

/**

* 通过构造器 自定义栈的大小

* @param size 栈的大小

*/

public ListStack(int size)

{

header = null;

elementCount = 0;

this.size = size;

}

/**

* 设置堆栈大小

* @param size 堆栈大小

*/

public void setSize(int size)

{

this.size = size;

}

/**

* 设置栈顶元素

* @param header 栈顶元素

*/

public void setHeader(Node header)

{

this.header = header;

}

/**

* 获取堆栈长度

* @return 堆栈长度

*/

public int getSize()

{

return size;

}

/**

* 返回栈中元素的个数

* @return 栈中元素的个数

*/

public int getElementCount()

{

return elementCount;

}

/**

* 判断栈是否为空

* @return 如果栈是空的,返回真,否则,返回假

*/

public boolean isEmpty()

{

if (elementCount == 0)

return true;

return false;

}

/**

* 判断栈满

* @return 如果栈是满的,返回真,否则,返回假

*/

public boolean isFull()

{

if (elementCount == size)

return true;

return false;

}

/**

* 把对象入栈

* @param value 对象

*/

public void push(Object value)

{

if (this.isFull())

{

throw new RuntimeException("Stack is Full");

}

header = new Node(value, header);

elementCount++;

}

/**

* 出栈,并返回被出栈的元素

* @return 被出栈的元素

*/

public Object pop()

{

if (this.isEmpty())

{

throw new RuntimeException("Stack is empty");

}

Object obj = header.getElement();

header = header.getNext();

elementCount--;

return obj;

}

/**

* 返回栈顶元素

* @return 栈顶元素

*/

public Object peek()

{

if (this.isEmpty())

{

throw new RuntimeException("Stack is empty");

}

return header.getElement();

}

}

分享到:

2010-05-26 17:19

浏览 722

评论

java 链表实现堆栈_用JAVA实现堆栈(链表篇)相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  3. java 版本查看命令_查看Java版本命令如何查看?Java常用命令详解

    现在程序员开发项目都在使用工具,很多人可能都忘记了Java自带命令,下面就让我来介绍些吧. 1.java.exe: 运行java程序,这个相信每一位用Java的人知道了. 2.javac.exe: 编 ...

  4. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...

  5. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  6. java代码初体验_第一次Java 8体验

    java代码初体验 像世界其他地方一样,我深深地爱上了Slack. 为什么? 原因很多,但主要的原因是它提供了一种围绕通讯而非工具真正构建SDLC流程的新方法. 您认为这些天哪个更常见,杂乱无章的机智 ...

  7. java线程卡住排查_基于 Java 线程栈 排查问题

    除日志外,还有没有别的方式跟踪线上服务问题呢?或者,跟踪并排除日志里无法发现的问题? 方法当然是有的,就是通过现场快照定位并发现问题.我们所说的现场,主要指这两方面: Java 线程栈.线程栈是Jav ...

  8. java使用外部库_在Java中使用外部库

    java使用外部库 Java附带了一组核心库,其中包括定义常用数据类型和相关行为的库,例如String或Date : 与主机操作系统进行交互的实用程序,例如System或File : 有用的子系统来管 ...

  9. java 1.6 最大化_关于java:JDK 1.6和1.7中的新功能

    我很了解JDK 1.5.众所周知,除了新的API(例如AtomicInteger),还有一些主要的语言更改,例如提供对泛型的支持.添加枚举.私有化自动装箱和自动取消装箱等. 我想找到一些资源,它们最好 ...

  10. 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...

    广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少 首页 > java > 广东java工资待遇 作者:镀金池   发布时间:2018-12-22 11:20 在 ...

最新文章

  1. 【UML】状态图Statechart diagram(转)
  2. 11.typescript-元组
  3. Makefile常用信息查询页
  4. Flink从入门到精通100篇(十)-双亲委派模型与 Flink 的类加载策略
  5. PyTorch 深度学习: 60 分钟极速入门
  6. node windows更新_node.js 01 简介 - 产生,发展历程,优势,适用场景,实际应用
  7. 对象的序列化流_ObjectOutputStream
  8. 用startSmoothScroll实现RecyclerView滚动到指定位置并置顶,含有动画。
  9. [vue] vue如果想扩展某个现有的组件时,怎么做呢?
  10. java学习(156):反序列化
  11. Stage划分和Task最佳位置
  12. html文字竖直书写,css 文字竖直居中的写法和图片垂直居中代码(图文)
  13. BZOJ4152 AMPPZ2014 The Captain 【最短路】【贪心】*
  14. Java实现Map集合二级联动
  15. Mysql DBA 高级运维学习之路-mysql数据库乱码问题
  16. 欧姆龙气压传感器 2SMPB-02E程序编写
  17. 2021天水高考成绩查询,2021天水高考成绩查询入口
  18. epson r330语言设置_爱普生打印机使用方法 爱普生r330打印机故障
  19. 能ping通工作组计算机 无法访问,能ping通却不能访问共享解决办法(亲测菜鸟版).doc...
  20. 计算机操作系统 直接地址 多级间接地址

热门文章

  1. 2019最新论文阅读-BlazeFace:面向移动设备的实时人脸检测
  2. 当你发现你的Alter报错的时候请看看是不是粗心了
  3. 无监督/自监督/半监督的景物分割方法
  4. LeetCode之同构字符串
  5. 【js】querySelectorAll和getElemensByTagName的区别
  6. 如何配置 Windows XP SP2 中的 Internet Explorer 增强安全功能
  7. 复杂车间调度问题三维析取图建模系列预告
  8. 【从C到C++学习笔记】C++介绍/推荐书籍/开发工具
  9. 【OpenCV学习笔记】【编程实例】四(获取一个或多个感兴趣区域)
  10. 【OpenCV学习笔记】【函数学习】八(序列数据结构)