學霸筆記 資料結構基礎知識大全

2021-09-30 20:25:11 字數 2747 閱讀 1847

一、學習知識點:

1、順序表、鍊錶

2、順序棧、鏈棧

3、順序佇列、鏈式佇列

4、樹5、圖&雜湊表

二、學習內容

1、(1)順序表:簡記:立個flag標記最後有效元素的位置。特點:查詢快,刪、增慢。插入的元素從前面逐個插入。

(2)鍊錶:頭插、尾插。單向或雙向迴圈鍊錶要注意頭結點與尾節點的連線

在鍊錶操作中經常出現段錯誤的原因:當用指標進行位址操作時由於指標是個變數,可以表示某個位址也可表示null,因為操作時對指標變數進行的賦值操作可能會導致指標被賦予null,再對此時的指標進行位址偏移操作就會產生段錯誤。另乙個需要注意的問題:指標不僅要關注被賦予的是不是位址,大小是否匹配,在鍊錶操作中還要關注操作物件

2、(1) 順序棧:也是立個int 型 flag,像運算元組一樣 -1為空,n-1時為滿,flag自增時放資料,刪除時先把資料取出記錄,flag自減

(2) 鏈棧:一、只有鍊錶 先把頭結點的下家初始為空,然後採取頭插法,只是頭結點的下家為空時棧空,之後頭結點一直往棧頂公升。刪除:先用個指標把頭結點的下家記錄下來,再把頭結點的下家的資訊記錄下來,然後頭結點與頭結點下家的下家連線上後就可刪除了

3、(1) 順序佇列:立兩個flag(頭和尾),頭尾相等時為空,尾加1對陣列長度取模等於頭滿

(2) 鏈式佇列:用鍊錶操作,乙個結構體記錄資訊和下家,另乙個結構體為節點型別的指標分別用於指向頭和尾節點,此佇列只有空沒有滿的情況。申請空間的時候先為有兩個節點型別的指標的結構體申請,然後通過指標解引用申請乙個節點型別的空間,用這兩個指標接收位址,接著將指向頭結點的指標的下家初始化為null,其實就是初始化鍊錶,當頭節點的下家為空時隊列為空。

4、(1)樹的建立和前序(根 左 右)、中序(左 根 右)都採用遞迴的方法

(2)樹的層次遍歷:用鏈式佇列操作,主要是將樹的某個節點的資料和左右子節點封裝成乙個資料,再讓其充當鍊錶操作中的資料元素的位置。

(3)非遞迴先序遍歷樹:用鏈棧操作 做法與樹的層次遍歷相同。

(4)完全二叉樹:也採用遞迴的方式建立,在建立的時候傳兩個引數,乙個是節點總數,乙個是傳進去的節點號(節點內的資料等於節點號時),然後利用節點的左子節點為節點的節點號*2,右節點為節點的節點號*2+1判斷條件,滿足左右子節點都小於等於最大節點號則遞迴建立,不滿足則返回空。

5、圖分為有向圖和無向圖,有向圖是單向的,無向圖是雙向的。圖的演算法有深度優先演算法(相當於樹的前序遍歷)、廣度優先演算法(相當於樹的層次遍歷)

雜湊表 用鍊錶操作 乙個存放普通資料陣列 乙個節點型別陣列:初始化陣列成員資料為0,指標next為空,這個節點型別的陣列相當於一排併排的頭結點,位置由陣列下標標示。然後將陣列中的資料對陣列長度取模計算資料存放下標,後面就是鍊錶的操作。

三、經驗小結

例:球鐘問題 將這個問題的各種可重複單一功能封裝成函式,後期呼叫即可,在main函式中寫邏輯呼叫即可。這種做法類似於檔案io操作,別人提供的庫函式就是實現某一可重複單一功能,將要的任務在main中寫邏輯,遇到相應的要做的功能直接呼叫即可。

編寫**時常犯錯誤:

標頭檔案忘記打(帶有退出狀態)

全域性變數一般不在標頭檔案中定義,在標頭檔案中定義標頭檔案的話就不能將標頭檔案初始化為0,陣列要加static

乙個程式本質上都是由 bss段、data段、text段三個組成的。在採用段式記憶體管理的架構中(比如intel的80x86系統),bss段(block started by symbol segment)通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域,一般在初始化時bss 段部分將會清零。bss段屬於靜態記憶體分配,即程式一開始就將其清零了。

比如,在c語言之類的程式編譯完成之後,已初始化的全域性變數儲存在.data 段中,未初始化的全域性變數儲存在.bss 段中。

全域性變數,靜態變數預設初始化

陣列的初始化只能在定義時用,特別要注意結構體指標內有陣列,為其malloc申請空間時

未定義錯誤;

指標的定義 例:int *a,*b;(a,b都是指標)

int *a,b;(a是指標,b不是)在定義指標時,將

*與變數當做乙個整體來看以表示是乙個指標變數;

將結構體成員沒有解引用或引用就直接使用造成未定義錯誤

c語法錯誤:例如:指標 按照c的規則,靜態的指標賦值操作或偏移操作是沒有錯誤的,但在程式中,常用變數來代替值,而乙個程式中的變數經常會變,例當指標的值在某一刻被賦空值又對這個指標進行偏移操作或其他不應有的操作就會出現斷錯誤,也屬於c語法錯誤,在程式設計中要關注編寫時指標變數對應的位址,大小,物件以及程式執行後變數的值發生的變化,以及發生了變化後對其進行的操作

在程式設計時對乙個變數的關注的:1.變數型別,普通型別,結構體型別,指標型別,陣列,變數的值會發生變化,對發生變化後的變數進行的操作可能造成的結果

對不同型別的變數的使用要符合語法

資料型別是對取值範圍和運算方式的限定

佇列和棧本質都是線性表

標頭檔案:函式宣告,函式實現,結構體定義

不能對表示式和常量賦值

結構體指標:->

結構體:.

順序表:陣列是儲存資料的容器,為這個容器定義一些

增刪查改的運算,把這個集合稱為順序表

段錯誤:空指標,非法指標

$?(返回上一條shell指令執行的結果)

exit()終止程序 標頭檔案

return 讓當前函式返回

main函式return 後面也有乙個exit

char * p;

%p ,p 列印p的值

printf()語句是從右往左執行的

順序表查詢快,插入刪除慢,鍊錶相反

要關注指標指向的物件。

棧本質上是乙個實現後進先出的線性表

資料結構基礎知識

時間複雜度和空間複雜度 同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個演算法的評價主要從時間複雜度和空間複雜度來考慮。1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測...

資料結構基礎知識

一種資料的邏輯結根據需要可以表示成多種儲存結構,常用的儲存結構有順序儲存 鏈結儲存 索引儲存等,採用不同的資料結構,其資料處理的效率是不同的。線性表是一種常用的資料結構。在實際應用中,線性表都是以棧 佇列 字串 陣列等特殊線性表的形式來使用的。線性表是一種線性結構。線性表有順序儲存結構和鏈式儲存結構...

資料結構基礎知識

簡單的說,資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作等的學科。描述一類非數值計算問題的數學模型不再是數學方程,而是諸如表 樹和圖之類的資料結構。資料結構 的研究不僅涉及到計算機硬體 特別是編碼理論 儲存裝置和訪問方法等 的研究範圍,而且和計算機軟體的研究有著...