棧與佇列 Linux C程式設計一站式學習

2021-10-02 19:10:43 字數 886 閱讀 9862

資料結構的概念

資料結構是資料的組織方式。程式中用到的資料都不是孤立的,而是有相互聯絡的,根據訪問資料的需求不同,同樣的資料可以有多種不同的組織方式。

資料的組織方式包含了儲存方式和訪問方式這兩層意思,二者是緊密聯絡的。比如說陣列元素的儲存空間是連續的。

堆疊堆疊也是一組資料的集合,它的訪問規則限制為push(入棧)、pop(出棧)兩種操作。

對於棧而言,先壓棧的元素後出棧、後壓棧的元素後先棧,因此堆疊這種資料結構的特點可以概括為lifo(last in first out,後進先出)。

深度優先搜尋(dfs)

佇列和廣度優先搜尋(bfs)

佇列也是一組元素的集合,也提供兩種基本操作:enqueue(入隊)將元素新增到隊尾,dequeue(出隊)從隊頭取出元素並返回。就像排隊買票一樣,先來先服務,先入隊的人也是先出隊的,這種方式稱為fifo(first in first out,先進先出)。

廣度優先搜尋每次都從各個方向探索一步,向前推進一步。廣度優先搜尋可以找到從起點到終點的最短路徑,而深度優先搜尋找到的不一定是最短路徑。

廣度優先搜尋的缺點出來了:在樹的層次較深&子節點數較多的情況下,消耗記憶體十分嚴重。廣度優先搜尋適用於節點的子節點數量不多,並且樹的層次不會太深的情況。

環形佇列

如果需要使用佇列出隊元素位置,可以考慮使用環形佇列。

環形佇列: 把queue陣列想像成乙個圈,head和tail指標仍然是一直增大的,當指到陣列末尾時就自動回到陣列開頭,從head到tail之間是佇列的有效元素,從tail到head之間是空的儲存位置,如果head追上tail就表示佇列空了,如果tail追上head就表示佇列的儲存空間滿了。

Linux C程式設計一站式學習

北京亞嵌教育研究中心 ps ef grep sctp grep全稱是global regular expression print,表示全域性正規表示式.gdb除錯又看一遍。迅速用起 pthread cond timedwait 條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個...

Linux C程式設計一站式學習 筆記

關於程式的討論裡提到了c語言的可移植,原本不知道為什麼,現在知道,原來是因為各種平台上都有c語言的編譯器,這就好像是一種由於廣泛使用而成為規範的東西一樣,當所有機器上都有你的編譯器的時候,你的可移植性當然強了。之前看v6shell的 就沒明白詞法和語法有什麼差別,這裡講到了詞法就是單詞 token ...

LinuxC程式設計一站式學習 堆疊

本科學習資料結構時實踐比較少,因此最近開始複習,看到 既可以打基礎,又可以順便學習linux的知識。原始 include define max row 5 define max col 5 struct point stack 512 int top 0 int maze 5 5 void push...