本章主要介紹:
1.什麼是線性表 2.順序表及初始化過程詳解 3.順序表以及基本操作 4.鍊錶(鏈式儲存結構)及建立(c語言詳解版)
5.鍊錶的基本操作 6.順序表和煉表的優缺點 7.靜態鍊錶及實現 8.靜態鍊錶基本操作 9.靜態鍊錶和動態鍊錶區別詳解
10.迴圈鍊錶(約瑟夫環)的建立及c語言實現 11.雙向鍊錶及其建立 12.雙向鍊錶基本操作 13.雙向迴圈鍊錶及建立
13.資料結構實現專案——俄羅斯輪盤賭小遊戲
目錄
資料結構(知識點005)
第二章 線性表
2.2 順序表及初始化過程詳解
2.2.1順序表的初始化
順序表,全名為順序儲存結構,是線性表的一種。通過之前的學習我們知道線性表用於儲存邏輯關係為「一對一」的資料,順序表自然也不例外。
不僅如此,順序表對資料的物理儲存結構也有要求。順序表儲存資料時,會提前申請一整塊足夠大小的物理空間,然後將資料依次儲存起來,儲存時做到資料元素之間不留一絲縫隙。
比如:使用順序表儲存集合【1,2,3,4,5】,資料最終的額儲存狀態如圖1所示:
圖 1 順序儲存結構示意圖
由此我們可以得出,將「具有 '一對一' 邏輯關係的資料按照次序連續儲存到一整塊物理空間上」的儲存結構就是順序儲存結構。
通過觀察圖 1 中資料的儲存狀態,我們可以發現,順序表儲存資料同陣列
非常接近。其實,順序表儲存資料使用的就是陣列。
使用順序表儲存資料之前,除了要申請足夠大小的物理空間之外,為了方便後期使用表中的資料,順序表還需要實時記錄以下 2 項資料:
順序表申請的儲存容量;
順序表的長度,也就是表中儲存資料元素的個數;
因此,我們需要自定義順序表,c 語言實現**如下:
typedef struct tabletable;
注意,head 是我們宣告的乙個未初始化的動態陣列,不要只把它看做是普通的指標。
接下來開始學習順序表的初始化,也就是初步建立乙個順序表。建立順序表需要做如下工作:
因此,c 語言實現**如下:
#define size 5 //對size進行巨集定義,表示順序表申請空間的大小
table inittable()
t.length=0;//空表的長度初始化為0
t.size=size;//空表的初始儲存空間為size
return t;
}
我們看到,整個順序表初始化的過程被封裝到了乙個函式中,此函式返回值是乙個已經初始化完成的順序表。這樣做的好處是增加了**的可用性,也更加美觀。與此同時,順序表初始化過程中,要注意對物理空間的申請進行判斷,對申請失敗的情況進行處理,這裡只進行了「輸出提示資訊和強制退出」的操作,可以根據你自己的需要對**中的 if 語句進行改進。
通過在主函式中呼叫 inittable 語句,就可以成功建立乙個空的順序表,與此同時我們還可以試著向順序表中新增一些元素,c 語言實現**如下:
#include #include #define size 5
typedef struct tabletable;
table inittable()
t.length=0;
t.size=size;
return t;
}//輸出順序表中元素的函式
void displaytable(table t){
for (int i=0;i程式執行結果如下:
順序表中儲存的元素分別是:
1 2 3 4 5
可以看到,順序表初始化成功。
資料結構 知識點
定義 度 兒子數 分支節點 除了根和葉子的節點 根的深度為1 資料結構的分類 資料結構分為邏輯結構和物理結構。邏輯結構 表現資料之間的關係的一種資料結構,分為線性結構和非線性結構。物理結構 表現資料如何儲存的一種資料結構,通常分為順序結構 鏈式結構 索引結構和雜湊結構。有序表,也叫有序線性表,資料按...
資料結構知識點
1 線性結構與非線性結構 線性結構 線性表,棧,隊 乙個根節點,最多乙個前節點乙個後節點 首節點無前節點,尾接點無後節點 非線性結構 樹形結構,圖形結構 線性表 由一組資料元素構成,資料元素的位置只取決於自己的序號 陣列 棧 限定只能在表的一端進行插入和刪除,先進後出,只能在棧頂進出 佇列 只能在表...
資料結構,知識點
二叉樹 定義 二叉樹在圖論中是這樣定義的 二叉樹是乙個連通的無環圖,並且每乙個頂點的度不大於3。有根二叉樹還要滿足根節點的度不大於2。基本概念 二叉樹是遞迴定義的,其結點有左右之分,邏輯上二叉樹有五種基本形態 1 空二叉樹 2 只有乙個根節點的二叉樹 3 只有左子樹 4 只有右子樹 5 完全二叉樹。...