更新時(shí)間:2022-04-07 12:27:50 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2155次
在本文中,動(dòng)力節(jié)點(diǎn)小編會(huì)給大家介紹Java實(shí)現(xiàn)隊(duì)列。隊(duì)列是遵循 FIFO(先進(jìn)先出)原則的線性數(shù)據(jù)結(jié)構(gòu)。這意味著首先插入的對(duì)象將是第一個(gè)出來的對(duì)象,然后是下一個(gè)插入的對(duì)象。
入隊(duì):在隊(duì)列的尾部插入一個(gè)項(xiàng)目。
出隊(duì):從隊(duì)列的前面移除對(duì)象并返回它,從而將隊(duì)列大小減一。
Peek:返回隊(duì)列前面的對(duì)象而不刪除它。
IsEmpty:測試隊(duì)列是否為空。
大小:返回隊(duì)列中存在的元素總數(shù)。
// A class to represent a queue
class Queue
{
private int[] arr; // array to store queue elements
private int front; // front points to the front element in the queue
private int rear; // rear points to the last element in the queue
private int capacity; // maximum capacity of the queue
private int count; // current size of the queue
// Constructor to initialize a queue
Queue(int size)
{
arr = new int[size];
capacity = size;
front = 0;
rear = -1;
count = 0;
}
// Utility function to dequeue the front element
public int dequeue()
{
// check for queue underflow
if (isEmpty())
{
System.out.println("Underflow\nProgram Terminated");
System.exit(-1);
}
int x = arr[front];
System.out.println("Removing " + x);
front = (front + 1) % capacity;
count--;
return x;
}
// Utility function to add an item to the queue
public void enqueue(int item)
{
// check for queue overflow
if (isFull())
{
System.out.println("Overflow\nProgram Terminated");
System.exit(-1);
}
System.out.println("Inserting " + item);
rear = (rear + 1) % capacity;
arr[rear] = item;
count++;
}
// Utility function to return the front element of the queue
public int peek()
{
if (isEmpty())
{
System.out.println("Underflow\nProgram Terminated");
System.exit(-1);
}
return arr[front];
}
// Utility function to return the size of the queue
public int size() {
return count;
}
// Utility function to check if the queue is empty or not
public boolean isEmpty() {
return (size() == 0);
}
// Utility function to check if the queue is full or not
public boolean isFull() {
return (size() == capacity);
}
}
class Main
{
public static void main (String[] args)
{
// create a queue of capacity 5
Queue q = new Queue(5);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
System.out.println("The front element is " + q.peek());
q.dequeue();
System.out.println("The front element is " + q.peek());
System.out.println("The queue size is " + q.size());
q.dequeue();
q.dequeue();
if (q.isEmpty()) {
System.out.println("The queue is empty");
}
else {
System.out.println("The queue is not empty");
}
}
}
輸出:
Inserting 1
Inserting 2
Inserting 3
前面的元素是 1
移除 1
前面的元素是 2
隊(duì)列大小是 2
移除 2
移除 3
隊(duì)列是空的
enqueue()、dequeue()、peek()和函數(shù) 的時(shí)間復(fù)雜度是常數(shù)isEmpty(),size()即O(1)。
Java的庫還包含指定隊(duì)列操作的Queue接口。以下是使用該類的Queue接口示例:LinkedList
import java.util.LinkedList;
import java.util.Queue;
class Main
{
public static void main(String[] args)
{
Queue<String> queue = new LinkedList<String>();
queue.add("A"); // Insert `A` into the queue
queue.add("B"); // Insert `B` into the queue
queue.add("C"); // Insert `C` into the queue
queue.add("D"); // Insert `D` into the queue
// Prints the front of the queue (`A`)
System.out.println("The front element is " + queue.peek());
queue.remove(); // removing the front element (`A`)
queue.remove(); // removing the front element (`B`)
// Prints the front of the queue (`C`)
System.out.println("The front element is " + queue.peek());
// Returns the total number of elements present in the queue
System.out.println("The queue size is " + queue.size());
// check if the queue is empty
if (queue.isEmpty()) {
System.out.println("The queue is empty");
}
else {
System.out.println("The queue is not empty");
}
}
}
輸出:
前面元素是 A
前面元素是 C
隊(duì)列大小是 2
隊(duì)列不為空
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743