/**
* 栈是一种操作受限的线性表,特点是“先进后出”
* 方法:
* push(Object element);
* pop();
* peek();
*/
/**
* 用数组实现栈
* 压栈时依次往数组尾部插入,先插入的元素在数组头部;
* 弹栈时依次取出数组尾部的元素即可。
* */
class ArrayStack{
private int[] array;
private int size; //数组的元素个数
public ArrayStack(int space){ //创建一个空间大小为space的数组
array = new int[space];
size = 0;
}
//压栈
public boolean push(int value){
if (size >= array.length) return false; //超出数组长度
array[size] = value;
size++;
return true;
}
//弹栈
public int pop(){
if (size <= 0) return -1;
return array[--size];
}
//查看栈顶元素
public int peek(){
if (size <= 0) return -1;
return array[size - 1];
}
}
/**
* 用链表实现栈
* 压栈时从链表头部插入,先插入的元素在链表尾部;
* 弹栈时返回链表头部,链表头指针往后移位即可。
* */
class LinkStack{
//节点类
public class Node<E> {
public E data; //数据
public Node next; //指向下一节点的指针
public Node() {
}
public Node(E data, Node next) {
this.data = data;
this.next = next;
}
}
private Node head = null;
//压栈
public void push(int value){
//要插入的元素节点
Node<Integer> node = new Node<>(value,null);
node.next = head;
head = node; //头指针移位
}
//弹栈
public int pop(){
if (head != null){
int result = (Integer) head.data;
head = head.next;
return result;
}
return -1;
}
public int peek(){
if (head != null){
return (Integer) head.data;
}
return -1;
}
}
public class Stack {
public static void main(String[] args) {
LinkStack arrayStack = new LinkStack();
arrayStack.push(1);
arrayStack.push(2);
arrayStack.push(3);
arrayStack.push(4);
arrayStack.push(5);
System.out.println(arrayStack.pop());
System.out.println(arrayStack.pop());
System.out.println(arrayStack.peek());
System.out.println(arrayStack.pop());
System.out.println(arrayStack.pop());
System.out.println(arrayStack.pop());
System.out.println(arrayStack.pop());
System.out.println(arrayStack.peek());
}
}
Java实现栈结构
于 2023-03-18 16:40:56 首次发布