隊列
隊列是一種特殊的線性表,特殊之處在于它隻允許在表的前端(front)進行删除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行删除操作的端稱為隊頭。隊列具有先進先出的特點。
如圖
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLyUFVPdXV65EMRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5IjM5UDMyUTMzEzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
當在隊列中進行讀取操作(front)時,會讀取隊首元素,也就是元素1,使用pop時删除的也是隊首元素,經過front與pop操作,隊列會變成
而進行插入操作,則會在隊尾執行,假設執行push操作,添加元素5,會出現
使用隊列時需頭檔案queue
#include<queue>
定義變量
queue<int>q //括号内為隊列的變量類型
隊列的一些操作函數的簡單使用
q.front()//取隊列中第一個元素
q.pop()//删除隊列中第一個元素
q.empty()//判斷隊列是否為空,為空時傳回1;
q.push()//将某元素插入隊列
BFS即廣度優先搜尋,是最簡便的圖的搜尋算法之一,這種方法不考慮需要查找的具體結果,就是從某一點出發周遊整個圖,直到找到結果。所謂廣度優先搜尋,就是從某一點出發,優先搜尋與其相鄰的點,搜尋完成之後,繼續搜尋已經搜尋過的相鄰點的相鄰點。舉個栗子
觀察下面二叉樹(就是每個點的下方隻有兩條分叉的圖)
當從樹的頂點a開始搜尋時,設a是第一層的元素。優先搜尋其相鄰點,就是b和c,也就是第二層元素。搜尋完a的相鄰節點(第二層元素搜尋結束),繼續搜尋其相鄰點的相鄰節點(第三層元素,已搜尋過不需搜尋),就是搜尋b的相鄰節點d與e,完成後搜尋c的相鄰節點。這個過程我是利用隊列來完成的,利用隊列先進先出的特點,不使用隊列也可以。(個人覺得使用隊列解決BFS問題超級友善)
廣度優先搜尋,不太合理的講,就是一層一層的搜尋(不搜尋完就不進入下一層的搜尋),搜尋完一層,緊接着搜尋下一層,與其對應的是深度優先搜尋(DFS),像是一條路走到黑的倔驢。
以上均為個人觀點,僅是對隊列的一些簡單使用及BFS的了解,如有錯誤請指出,勿噴,不勝感激
---------------------------------------------------------------------------一隻走在ACM路上的弱渣