資料結構 第二章小結

2022-05-20 04:32:49 字數 2837 閱讀 3726

ps:第一次用寫,記錄第一次

一、資料結構第二章主要為:順序表和煉表的構造及其增刪查改的一些基本操作,以及粗略計算它們的時間or空間的複雜度。

1、順序表:

(1)  特點:邏輯結構上相鄰,物理儲存上也是相鄰的,屬於隨機儲存;

(2)  優點:便於使用下標進行查詢,例如:查詢某陣列的第6項的資料是幾;

儲存密度為1;

(3)    缺點:由於其物理儲存相鄰,故無法將空間中零零散散的碎片空間利用起來;

2、鍊錶:

(1)   特點:邏輯結構上相鄰,物理儲存上不一定相鄰的,屬於順序儲存;

單鏈表有頭指標指向;

含頭結點的空表:l->next=null//(頭結點的指標域為空)

無頭結點的空表:l==null//(l為單鏈表的頭指標)

(2)    優點:可以充分利用碎片空間;

可以便於增刪--改變指標的指向;

(3)    缺點:儲存密度小於1;

需要為指標騰出空間;

3、鍊錶vs順序表:

(1)在增刪工作為主的問題中,主要使用鍊錶,時間複雜度較低;

(2)在查詢工作中,且使用下標查詢為主的問題中,使用順序表為好;

(3)時間複雜度:

順序表:

取值演算法:o(1) 、 查詢演算法:o(n)、增加or刪除演算法:o(n)

空間複雜度s(n)=o(1)    均沒有占用輔助空間;

鍊錶:取值演算法:o(n)、查詢演算法:o(n)、增加or刪除演算法:o(n)

空間複雜度s(n)=o(1)    均沒有占用輔助空間;

二、做題過程中遇到的其他問題

1、心理上:上個學期c++打題過少,對於使用一些函式,指標型別的**充滿恐懼與抗拒,甚至於陣列都有那麼一點

2、現實中:書本給的**不夠詳細,得自己上網搜**

3、題目上:new運算子的應用:

(1)、開闢單變數位址空間

指標在初始化時需要動態申請空間 int*a=new int [空間大小] 等同於int*a; a = new int [空間大小],

例如:int *a = new int(5) 作用同上,但是同時將整數賦值為5;

(2)、開闢陣列空間

要訪問new所開闢的結構體空間,無法直接通過變數名進行,只能通過賦值的指標進行訪問。

(3)、c++中使用new的注意事項:

1、、使用者是無法主動呼叫建構函式的,所以需要借助placement new,但是使用者可以主動呼叫析構函式,所以用完這些物件後,呼叫析構函式,然後用對應分配記憶體的方法去釋放記憶體。

2、、事實上malloc並不一定比operatornew節省多少時間,用placement new常常是為了考慮效能,所以會配合記憶體池一起使用。 (ps: 記憶體池(memory pool)是一種記憶體分配方式。通常我們習慣直接使用new、malloc等api申請分配記憶體,這樣做的缺點在於:由於所申請記憶體塊的大小不定,當頻繁使用時會造成大量的記憶體碎片並進而降低效能。)

補充:malloc的全稱是memory allocation,中文叫動態記憶體分配,用於申請一塊連續的指定大小的記憶體塊區域以void*型別返回分配的記憶體區域位址,當無法知道記憶體具體位置的時候,想要繫結真正的記憶體空間,就需要用到動態的分配記憶體。

3、、new與malloc、operator new、placement new 的區別:

從本質上來說,malloc(linux上具體實現可以參考man malloc,glibc通過brk()&mmap()實現)是libc裡面實現的乙個函式,如果在source code中沒有直接或者間接include過stdlib.h,那麼gcc就會報出error:『malloc』 was not declared in this scope。如果生成了目標檔案(假定動態鏈結malloc),如果執行平台上沒有libc(linux平台,手動指定ld_library_path到乙個空目錄即可),或者libc中沒有malloc函式,那麼會在執行時(run-time)出錯。new則不然,是c++的關鍵字,它本身不是函式。new不依賴於標頭檔案,c++編譯器就可以把new編譯成目標**(g++4.6.3會向目標中插入_znwm這個函式,另外,編譯器還會根據引數的型別,插入相應的建構函式)。

在使用上,malloc 和 new 至少有兩個不同: new 返回指定型別的指標,並且可以自動計算所需要大小。第一、malloc 函式返回的是 void * 型別。第

二、函式的實參為 sizeof(int) ,用於指明乙個整型資料需要的大小。

(此後省略,直接放**,因為發現越查越深入,待以後化成自己知識的時候再寫幾篇關於這些函式不同的部落格)

記憶體池)

函式(含有其與new的區別))

new與new的區別)

較為簡單的解釋了一下其區別:new、operator new、::new、placement new)

關於sort函式的應用及其compare函式的機制:

1、、sort的定義:用於c++中,對給定區間所有元素進行排序。標頭檔案是#include

2、、sort函式包含在標頭檔案為#include的c++標準庫中

sort函式有三個引數:

(1)第乙個是要排序的陣列的起始位址。

(2)第二個是結束的位址(最後一位要排序的位址的下一位址)

(3)第三個引數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個引數,此時預設的排序方法是從小到大排序。

ps:如果要改變排序方法:需要加入乙個比較函式compare(),如:

boolcompare(inta,intb)

參考資料:

三、接下來

當然是好好的打**,與同學多多交流

資料結構第二章小結

1.本章學習了鍊錶這乙個全新的資料結構,可以說是學習運用指標的乙個循序漸進的過程,鍊錶中用指標將表中的元素鏈結而實現了資料在物理儲存關係上的分散,可以運用鍊錶去操作比線性表規模更大的資料,且針對插入和刪除操作來說,鍊錶的時間複雜度會比線性表減小許多。2.這一章進行了兩次小組作業,基本都是在針對 增刪...

資料結構 第二章學習小結

第二章 線性表 學習小結 1.本章內容小結 學習到了線性表的兩種儲存結構 順序儲存結構和鏈式儲存結構。其中順序儲存結構的特點是 邏輯上相鄰,物理上也相鄰。同時在順序表儲存長度過大的資料時,需要先申請足夠空間。以及順序表的重要基本操作包括 初始化,取值,插入,刪除,查詢。初始化例如 void init...

第二章 資料結構 二

知識點 trie樹 並查集,堆的操作 高效地儲存和查詢字串集合的資料結構 const int n 100010 int son n 26 cnt n idx 插入 void insert char str cnt p 以這個點結尾的字元數 查詢 intquery char str return cn...