讀《資料結構(C語言版)》(4)

2021-04-02 21:07:06 字數 865 閱讀 5702

從本節開始討論線性表,這次先討論線性表的順序實現。

一提到線性表,我們腦子很可能會出現陣列、鍊錶這樣的概念。沒錯,陣列和鍊錶都是線性表,但它們只是線性表的兩種實現,強調的是線性表的物理結構。我們研究乙個資料結構時,一般先從它的邏輯結構入手,等研究清楚了邏輯結構再考慮具體的物理實現。在寫程式時,思路也是一樣的,先要分清哪些問題是邏輯的,哪些問題是物理的,先邏輯後物理是計算機解題的一般步驟。如果開始不想清楚邏輯,而一頭扎到物理細節中,就容易理不清思路或者作出有缺陷的設計。當然這不是絕對的,很多情況下物理結構也會影響邏輯結構的設計。

簡單來說,乙個線性表是n個相同特性的資料元素的有限序列。這裡「n個相同特性的資料元素」指的是資料物件,「序列」指的是資料關係,每個資料元素都有乙個確定的位置。從資料物件和資料關係入手,就很容易看清乙個資料結構的本質。就線性表來說,只要某些資料存在次序關係,並且各個元素特性相同,就可以認為是乙個線性表。

下面我們來考慮線性表的順序實現。在很多人包括我自己的眼裡,線性表的順序實現已經和陣列畫上了等號。雖然用陣列實現線性表的順序儲存結構天經地義,但不應該把順序實現侷限在陣列上。如果有一天你必須用組合語言實現乙個順序儲存的線性表,沒有了陣列你豈不是哭了。如作者所說,線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。用c語言實現時,由於線性表的長度可變,且所需最大儲存空間隨問題不同而不同,所以通常用動態分配的一維陣列來實現。

#define list_init_size 100  // 初始長度

#define listincrement  10   // 分配增量

typedef struct sqlist;

用上述結構在分配儲存空間時,初始分配可以用malloc,空間不夠再分配時可以用realloc,這個函式保證在原分配基礎上擴大容量時不影響其內容。

讀資料結構(C語言版)

資料 資料是對現實世界物質的符號表示,在計算機中的意思是能輸入到計算機中進行計算處理的符號為資料 實現是客觀世界在計算機中的表示方式,是程式加工的原材料。資料可以是聲音,文件 資料元素 組成資料的基本構成單位,通常以結構化的形式出現,比如一本書的書目資訊,包含作者,書名,出版刊號,出版社這些資料項,...

讀《資料結構(C語言版)》(6)

本來上一節介紹鏈式表示時,還應提到迴圈鍊錶和雙向鍊錶,但我決定還是不提為好。如果將學習一門課程的方法比作遍歷演算法的話,我覺得廣度優先演算法要比深度優先演算法好。一門全新的課程,如果一開始就進入具體的細節的話,很容易有挫折感,進而喪失興趣。所以如果能對這門課程有乙個大局觀,了解這門課程是講什麼的,涉...

資料結構(C語言版)

用棧實現數字的進製轉換 10轉8 棧 限定只能在表尾進行插入或者刪除操作的線性表 特點 先進後出 儲存表示方法 順序棧和鏈棧 本文用的順序棧 實現 readonly name code class c include include define stack init size 100 儲存空間初始...