栈或者队列是经典的数据结构,虽然平时都在用,但是都是别人封装好的集合,我们不用手写了,但是这些内功,作为开发人员来说是必须要掌握的。
栈我们知道,在数组中,若知道数据项的下标,便可立即访问该数据项,或者通过顺序搜索数据项,访问到数组中的各个数据项。但是栈和队列不同,它们的访问是受限制的,即在特定时刻只有一个数据项可以被读取或者被删除。众所周知,栈是先进后出,只能访问栈顶的数据,队列是先进先出,只能访问头部数据。这里不再赘述。
栈的主要机制可以用数组来实现,也可以用链表来实现,下面用数组来实现栈的基本操作:
public class ArrayStack { private long[] a; //栈数组大小 private int size; //栈顶 private int top; //初始化栈 public ArrayStack(int maxSize) { this.size = maxSize; a = new long[size]; //表示空栈 top = -1; } //入栈 public void push(int value) { if (isFull()) { System.out.println("Stack is Full!"); return; } a[++top] = value; } //出栈,返回栈顶元素并删除 public long pop() { if (isEmpty()) { System.out.println("Stack is Empty!"); return 0; } return a[top--]; } //获取并返回栈顶元素 public long peak() { if (isEmpty()) { System.out.println("Stack is Empty!"); return 0; } return a[top]; } public boolean isFull() { return top == size - 1; } public boolean isEmpty() { return top == -1; } //遍历栈元素 public void display() { if (isEmpty()) { System.out.println("Stack is Empty!"); return; } for (int i = top; i >= 0; i--) { System.out.print(a[i] + " "); } System.out.println(); } }