栈的实现
链表
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class Main{ Node top = null;
class Node{ Node next; int val; public Node(int val){ this.val = val; } }
…… }
|
数组(需要考虑扩容)
扩容:数组放满时,新建一个容量为当前数组容量两倍的扩容数组,再把当前数组的值全部复制到扩容数组内。
扩容的方法:
1
| System.arraycopy(array,0,arrayBig,array.length);
|
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class Main{ int[] data; int top; int maxSize;
public void createStack(int n){ maxSize = n; data = new int[maxSize]; } public void reSize(){ int[] dataBig = new int[maxSize*2]; System.arraycopy(data,0,dataBig,data.length); data = dataBig; }
…… }
|
栈的一些API
实例化栈类
1 2
| Stack<Integer> os = new Stack<>(); Deque<Integer> ns = new LinkedList<>();
|
入栈
1 2
| os.push(3); ns.push(3); or ns.addFirst(3);
|
出栈(删除栈顶元素并返回)
1 2
| os.pop(); ns.pop(); or ns.removeFirst();
|
判断栈是否为空
1 2 3
| if(os.empty()) if(ns.isEmpty()) or if(ns.peekFirst == null)
|
得到栈顶元素
1 2
| Integer top = os.peek(); Integer top = ns.peek() or ns.peekFirst()
|
得到栈的大小
1 2
| int size = os.size(); int size = ns.size();
|