一直想用java實現棧、隊列,可是沒時間,馬上要找實習了,就復習了一下算法,實現了一個簡單的棧,代碼還是有問題的,有興趣的兄弟幫忙改正
問題:多線程的話pop和push只能有一個方法被執行需要加互斥變量
import java.util.Arrays; public class Stack<Item> { private transient Object[] data;// 存儲數據 private int top;// 表示棧頂元素 private int oldCapacity; public Stack() { oldCapacity = 100; data = new Object[oldCapacity];// 需要擴充可以重新建數組,把這個復制過去 top = -1; } public synchronized void push(Item t) { // 壓棧 if (top >oldCapacity-2) { int newCapacity = (oldCapacity * 3) / 2 + 1;// 模仿Arraylist增加數組長度長度 oldCapacity = newCapacity; data = Arrays.copyOf(data, newCapacity); } top++; data[top] = t; } public synchronized Item pop() { // 出棧 if (top < 0) { return null; } Item t = (Item) data[top]; top--; return t; } }