Java隊(duì)列和棧是計(jì)算機(jī)程序中常用的數(shù)據(jù)結(jié)構(gòu),它們可以用來存儲(chǔ)和操作數(shù)據(jù)。隊(duì)列和棧又有各自的實(shí)現(xiàn)原理。
隊(duì)列是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu)。它的實(shí)現(xiàn)原理是在底層使用一個(gè)數(shù)組或鏈表來存儲(chǔ)數(shù)據(jù)。隊(duì)列有兩個(gè)指針:head指針和tail指針。head指向隊(duì)列的第一個(gè)元素,tail指向隊(duì)列的最后一個(gè)元素。當(dāng)元素入隊(duì)時(shí),tail指針會(huì)向后移動(dòng)一位,同時(shí)將元素存儲(chǔ)在tail指向的位置。當(dāng)元素出隊(duì)時(shí),head指針會(huì)向后移動(dòng)一位,同時(shí)返回head指向的元素。需要注意的是,隊(duì)列操作的時(shí)間復(fù)雜度是O(1)。
public class Queue{ private int[] arr; private int head; private int tail; public Queue(int size){ arr = new int[size]; head = 0; tail = 0; } public void enqueue(int val){ arr[tail] = val; tail++; } public int dequeue(){ int val = arr[head]; head++; return val; } }
棧是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu)。它的實(shí)現(xiàn)原理是在底層使用一個(gè)數(shù)組或鏈表來存儲(chǔ)數(shù)據(jù)。棧有一個(gè)指針,指向棧頂元素。當(dāng)元素入棧時(shí),棧頂指針會(huì)向后移動(dòng)一位,同時(shí)將元素存儲(chǔ)在棧頂指向的位置。當(dāng)元素出棧時(shí),棧頂指針會(huì)向前移動(dòng)一位,同時(shí)返回棧頂指向的元素。需要注意的是,棧操作的時(shí)間復(fù)雜度是O(1)。
public class Stack{ private int[] arr; private int top; public Stack(int size){ arr = new int[size]; top = -1; } public void push(int val){ top++; arr[top] = val; } public int pop(){ int val = arr[top]; top--; return val; } }
Java隊(duì)列和棧都是比較基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),掌握它們的實(shí)現(xiàn)原理對(duì)于編程工作來說是非常有幫助的。