資料結構的概念
資料結構是資料的組織方式。程式中用到的資料都不是孤立的,而是有相互聯絡的,根據訪問資料的需求不同,同樣的資料可以有多種不同的組織方式。
資料的組織方式包含了儲存方式和訪問方式這兩層意思,二者是緊密聯絡的。比如說陣列元素的儲存空間是連續的。
堆疊堆疊也是一組資料的集合,它的訪問規則限制為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...