本文力求简洁,只包含基础的栈功能,不想将大片的代码展示出来,让读者兴趣索然,阅读起来也十分费力,如有需要可以自行添加相关功能比如java.util.Stack
包中的Stack类包含的peek()
,empty()
等等函数.
能力有限,有误之处还请不吝赐教
定义内部类用于存储栈元素
class Node {
private Node below; //指向下一个栈元素的reference
private T type; //泛型元素
public Node(Node below, T type) {
this.below = below;
this.type = type;
}
}
Push()方法
public void push(T element) {
if (top == null) {
Node node = new Node(null, element);
this.top = node;
this.base = node;
length++;
} else {
Node node = new Node(top, element);
this.top = node;
length++;
}
}
pop()方法
public T pop() {
if (top != null) {
Node temp = top;
if (temp.below != null) {
top = temp.below;
length--;
} else {
this.base=null;
this.top=null;
length=0;
}
return temp.type;
} else return null;
}
public int getLength() {
return length;
}
整体代码比较简单,这里不再赘述,有一定java基础的应该都能够看懂
整体代码
public class MyStack<T> {
private Node base;
private Node top;
private int length = 0;
class Node {
private Node below;
private T type;
public Node(Node below, T type) {
this.below = below;
this.type = type;
}
}
public void push(T element) {
if (top == null) {
Node node = new Node(null, element);
this.top = node;
this.base = node;
length++;
} else {
Node node = new Node(top, element);
this.top = node;
length++;
}
}
public boolean isEmpty(){
if(base==null){
return true;
}else return false;
}
public T pop() {
if (top != null) {
Node temp = top;
if (temp.below != null) {
top = temp.below;
length--;
} else {
this.base=null;
this.top=null;
length=0;
}
return temp.type;
} else return null;
}
public int getLength() {
return length;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
Node current = top;
while (current != null) {
sb = sb.append("/"+current.type);
current = current.below;
}
return sb.toString();
}
public static void main(String[] args) {
MyStack<String> ms=new MyStack<>();
System.out.println(ms.getLength());
ms.push("value1");
ms.push("value2");
ms.push("value3");
System.out.println(ms.getLength());
System.out.println(ms.pop());
System.out.println(ms.pop());
System.out.println(ms.getLength());
System.out.println(ms.toString());
}
}