您的位置:首页 > 编程语言 > Java开发

用JAVA实现堆栈(链表篇)

2016-03-10 00:00 351 查看
什么是堆栈,关于这个名词,我在百度,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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: