java 链表实现堆栈_用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();

}

}

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-05-26 17:19

浏览 722

评论

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值