用JAVA实现堆栈(链表篇)
2016-03-10 00:00
351 查看
什么是堆栈,关于这个名词,我在百度,google搜索了半天,也没有发现一个比较权威的解释,还有许多资料语焉不详,就以维基百科的解释为准吧,和我记忆中的一致。
堆栈(英文:stack),中国大陆作堆栈,台湾作堆叠,在计算机科學中,是一種特殊的串列形式的資料結構,它的特殊之處在於只能允許在鏈結串列或陣列的一端(稱為堆疊頂端指標,英文為top)進行加入資料(push)和輸出資料(pop)的運算。另外堆疊也可以用一維陣列或連結串列的形式來完成。堆疊的另外一個相對的操作方式稱為佇列。
由於堆疊資料結構只允許在一端進行操作,因而按照後進先出(LIFO, Last In First Out)的原理運作。
堆疊資料結構使用兩種基本操作:推入(push)和彈出(pop):
推入(push) :將數據放入堆疊的頂端(陣列形式或串列形式),堆疊頂端top指標加一。
彈出(pop) :將頂端數據資料輸出(回傳),堆疊頂端資料減一。
下面是用java 链表 实现堆栈
堆栈(英文: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(); } }
相关文章推荐
- Struts2拦截器的使用 (详解)
- java中的日期转换
- java下Class.forName的作用是什么,为什么要使用它
- eclipse启动参数设置大全
- Java从控制台中读取数据完全攻略
- JAVA 中数组的几种排序方法
- java回调
- 用JAVA实现堆栈(数组篇)
- javassist:增强型的java反射工具,获取方法参数名
- 小议 java:comp/env
- Java排序汇总
- java.util.ResourceBundle使用详解
- java获取服务器一些信息的方法
- 验证日期的Java正则表达式
- Eclipse插件Ant里运用ftp遇到的问题
- java中获取文件路径的几种方式
- Struts2权限控制
- eclipse 设置启动时选择打开工作空间 删除无用工作空间
- Java操作数据库的元数据
- ECLIPSE取消自动更新