用JAVA实现堆栈(链表篇)

什么是堆栈,关于这个名词,我在百度,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(); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值