栈,类似一个有底的箱子,当向箱子放东西时,先放进去的会被压在底部,而取出时,则后放进去的会被先取出来。以下代码展示使用单向列表实现的栈。
//链表是以节点为单位的,对于单向链表,每个节点中包含一个值和指向下一个对象的引用
public class Node {
Object value;
Node next;
public Node(Object value) {
this.value = value;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
//自定义链表实现栈结构
public class Mystack {
Node head = null;
int size = 0;
public int getSize() {
return size;
}
//入栈
public void push(Object value) {
Node newNode = new Node(value);
//如果头元素不存在
if (head == null) {
head = newNode;
} else {
//关联成串
newNode.setNext(head);
//改变指向
head = newNode;
}
size++;
}
//出栈
public Object pop() {
Object value = head.getValue();
head = head.getNext();
size--;
return value;
}
//查看栈顶元素
public Object peek() {
return head.getValue();
}
}
//测试
public class StackTest {
public static void main(String[] args) {
Mystack mystack = new Mystack();
mystack.push(1);
mystack.push(2);
mystack.push(3);
mystack.push(4);
//pop会改变元素的size,导致执行两次就结束了。
// for (int i = 0; i < mystack.getSize(); i++) {
// System.out.println(mystack.pop());
// }
while (mystack.getSize() > 0) {
System.out.println(mystack.pop());
}
}
}
//结果:最后放进去的4,首先被取了出来。
4
3
2
1