Java中的棧(Stack)和隊列(Queue)都是常見的數(shù)據(jù)結構。它們分別用于處理一些具有類似先進先出(FIFO)或后進先出(LIFO)特性的數(shù)據(jù)。
Java的棧(Stack)是一種簡單的,基于后進先出(LIFO)的數(shù)據(jù)結構。這意味著,在堆棧中最后添加的元素必須是第一個被刪除的元素。棧是線性結構,可以使用數(shù)組或鏈表實現(xiàn)。以下是一個基于數(shù)組實現(xiàn)的棧代碼示例:
class Stack { private int[] arr; private int top; public Stack(int size) { this.arr = new int[size]; this.top = -1; } public void push(int x) { if (top == arr.length - 1) { System.out.println("Stack Overflow"); return; } arr[++top] = x; } public int pop() { if (top == -1) { System.out.println("Stack Underflow"); return -1; } return arr[top--]; } public int peek() { if (top == -1) { System.out.println("Stack Underflow"); return -1; } return arr[top]; } }
Java的隊列(Queue)也是一個線性數(shù)據(jù)結構,它基于先進先出(FIFO)的原則。隊列有兩個主要操作:enqueue(進隊)和dequeue(出隊)。enqueue操作將元素添加到隊列的尾部,而dequeue操作則從隊列頭部提取元素。以下是一個基于鏈表實現(xiàn)的隊列代碼示例:
class Queue { Node head, tail; public void enqueue(int x) { Node newNode = new Node(x); if (tail == null) { head = tail = newNode; return; } tail.next = newNode; tail = newNode; } public void dequeue() { if (head == null) return; head = head.next; if (head == null) tail = null; } class Node { int val; Node next; public Node(int x) { this.val = x; this.next = null; } } }
以上是Java棧和隊列的定義以及基于數(shù)組和鏈表的示例,開發(fā)者可以根據(jù)實際需要選擇適合的數(shù)據(jù)結構及其實現(xiàn)方法。