演算法筆記 佇列

2021-09-25 21:48:05 字數 1972 閱讀 3622

1)佇列是乙個有序列表,可以用陣列鍊錶來實現.

2)遵循先入先出原則.即: 先存入佇列的資料,要先取出來.後存入後取.(模擬火車進隧道)

3)佇列的插入操作稱為入隊(push),刪除操作稱為出隊(pop)。

4)示意圖:(使用陣列模擬佇列示意圖)

5)由於普通佇列會產生「假溢位」現象,所以我們採用環形佇列來解決這個問題

示意圖:(圖搞明白了**才會得心應手)

普通佇列: 空  front = rear ; 滿 rear = maxsize-1;

迴圈佇列: 空  front =  rear; 滿 (rear+1)%maxsize = front ; (迴圈佇列需要空出乙個位置保證迴圈進行)

進隊: rear = (rear+1)%maxsize ; 出隊 front = (front+1)%maxsize ;

6)實現**:(迴圈佇列)

class circlearray 

// 判斷佇列是否滿

public boolean isfull()

// 判斷佇列是否為空

public boolean isempty()

// 新增資料到佇列

public void addqueue(int n)

//直接將資料加入

arr[rear] = n;

//將 rear 後移, 這裡必須考慮取模

rear = (rear + 1) % maxsize; }

// 獲取佇列的資料, 出佇列

public int getqueue()

// 這裡需要分析出 front是指向佇列的第乙個元素

// 1. 先把 front 對應的值保留到乙個臨時變數

// 2. 將 front 後移, 考慮取模

// 3. 將臨時儲存的變數返回

int value = arr[front];

front = (front + 1) % maxsize;

return value; }

// 顯示佇列的所有資料

public void showqueue()

// 思路:從front開始遍歷,遍歷多少個元素

// 動腦筋

for (int i = front; i < front + size() ; i++) }

// 求出當前佇列有效資料的個數

public int size()

// 顯示佇列的頭資料, 注意不是取出資料

public int headqueue()

return arr[front];

}}

7)測試:

public class circlearrayqueuedemo  catch (exception e) 

break;

case 'h': // 檢視佇列頭的資料

try catch (exception e)

break;

case 'e': // 退出

scanner.close();

loop = false;

break;

default:

break;

}} system.out.println("程式退出~~");

}}

實際上,對於大部分資源有限的場景,當沒有空閒資源時,基本上都可以通過「佇列」這種資料結構來實現請求排隊。

演算法筆記 佇列

是什麼 什麼是佇列 為什麼為什麼有佇列這種資料結構 怎麼學習佇列這種資料結構 順序佇列class arrayqueue 入隊 public boolean enqueue string item last last first first 0 queuelist last item last ret...

演算法筆記 佇列

佇列 先進先出 食堂裡打飯,先入隊的人 排在最前的人 則最早打飯出隊。用隊首指標front 出隊 來指向隊首元素的前乙個位置,而rear 入隊 隊尾指標來指向隊尾元素 當用陣列來實現佇列時,隊首指標front和隊尾指標rear為int變數 陣列下標從0開始 而使用鍊錶來實現佇列時,則為int 型變數...

演算法筆記 佇列概念

佇列 queue 時一種先進先出的資料結構 以食堂排隊打飯為例,每個人都從隊伍最後面排起,隊伍最前面的人打完飯出隊 佇列總是從隊尾加入元素,而從隊首移除元素,滿足先進先出的規則 注意!使用乙個隊首元素front來指向隊首元素的前乙個位置 使用乙個隊尾指標rear來指向隊尾元素 和棧類似,當使用陣列來...