今天想起写一个实现栈的代码,就试着去写了些,发现使用平常的LinkedList<T>来实现栈的存取,获取指定值就显得太过依赖java API了,于是自己想了想栈的基本结构,无非就是底部元素和头部元素的进出操作,于是就想到了用链表来实现栈的存取。链表的基本结构就是当前结点的值指向下一个链表结点。即node.element->node.next。代码如下:
public class ListNode
{
public String element;
public ListNode next;
ListNode(String theElement) {
this(theElement, null);
}
ListNode(String theElement, ListNode n) {
element = theElement;
next = n;
}
public void setNext(ListNode n) {
next = n;
}
}
此类中使用element代表当前结点的值,next代表链表的下一个结点。而此类只是实现了链表的结构,下面来实现栈的操作:
public class StackList {
private ListNode topOfStack;//定义栈顶部元素这里可以看做为一个链表结点,因为它的值是指向下一个结点的
public StackList() {
topOfStack = null;
}
public void makeEmpty() {
topOfStack = null;
}
public boolean isEmpty() {
return topOfStack == null;
}
public void push(String x) {//将一个值为x的结点放入栈中,此时的顶部元素就变为这个结点了
topOfStack = new ListNode(x, topOfStack);
}
public String top() {//获取顶部元素值
if (isEmpty())
return "#";
else
return topOfStack.element;
}
public void pop() {//从栈中弹出元素,此时顶部元素变为原来顶部元素的下一个元素
if (!isEmpty())
topOfStack = topOfStack.next;
}
public String topAndPop() {//获取顶部元素并弹出
if (isEmpty())
return "#";
String topItem = topOfStack.element;
topOfStack = topOfStack.next;
return topItem;
}
}