Java棧和隊列是數據結構中常用的兩種數據類型。棧是一種后進先出(LIFO)的數據結構,隊列是一種先進先出(FIFO)的數據結構。
// 棧的實現 public class Stack { private int maxSize; // 棧的最大容量 private int[] stackArray; // 存儲數據的數組 private int top; // 棧頂指針 // 構造方法,初始化棧的容量和棧頂指針 public Stack(int maxSize) { this.maxSize = maxSize; stackArray = new int[maxSize]; top = -1; } // 判斷棧是否為空 public boolean isEmpty() { return top == -1; } // 判斷棧是否已滿 public boolean isFull() { return top == maxSize - 1; } // 入棧 public void push(int data) { if (isFull()) { throw new RuntimeException("棧已滿,無法入棧"); } stackArray[++top] = data; } // 出棧 public int pop() { if (isEmpty()) { throw new RuntimeException("棧為空,無法出棧"); } return stackArray[top--]; } // 查看棧頂元素 public int peek() { if (isEmpty()) { throw new RuntimeException("棧為空,無棧頂元素"); } return stackArray[top]; } }
在棧的實現中,我們定義了一個數組來存儲棧中的數據,同時使用一個指針top來表示棧頂的位置。入棧操作將數據添加到數組的末尾,并將指針top加一;出棧操作將棧頂元素從數組中移除,并將top減一。
// 隊列的實現 public class Queue { private int maxSize; // 隊列的最大容量 private int[] queueArray; // 存儲數據的數組 private int front; // 隊列頭指針 private int rear; // 隊列尾指針 // 構造方法,初始化隊列的容量、頭指針和尾指針 public Queue(int maxSize) { this.maxSize = maxSize; queueArray = new int[maxSize]; front = 0; rear = -1; } // 判斷隊列是否為空 public boolean isEmpty() { return rear == front - 1; } // 判斷隊列是否已滿 public boolean isFull() { return rear == maxSize - 1; } // 入隊 public void enqueue(int data) { if (isFull()) { throw new RuntimeException("隊列已滿,無法入隊"); } queueArray[++rear] = data; } // 出隊 public int dequeue() { if (isEmpty()) { throw new RuntimeException("隊列為空,無法出隊"); } return queueArray[front++]; } // 查看隊頭元素 public int peek() { if (isEmpty()) { throw new RuntimeException("隊列為空,無隊頭元素"); } return queueArray[front]; } }
在隊列的實現中,我們同樣使用一個數組來存儲隊列中的數據,使用兩個指針front和rear分別表示隊列頭和隊列尾的位置。入隊操作將數據添加到數組末尾,并將指針rear加一;出隊操作將隊頭元素從數組中移除,并將指針front加一。
上一篇php libgd