邏輯結構上呈線性分布的資料元素在實際的物理儲存結構中也同樣相互之間緊挨著,這種儲存結構稱為線性表的順序儲存結構。
也就是說,邏輯上具有線性關係的資料按照前後的次序全部儲存在一整塊連續的記憶體空間中,之間不存在空隙,這樣的儲存結構稱為順序儲存結構。
使用順序儲存結構儲存的資料,第乙個元素所在的位址就是這塊儲存空間的首位址。通過首位址,可以輕鬆訪問到儲存的所有的元素,只要首位址不丟,資料永遠能找到(一根繩上的螞蚱,要有就都有)。
順序表中存放資料的特點和陣列這種資料型別完全吻合,所以順序表的實現使用的是陣列
陣列實現順序表的儲存結構時,一定要注意預先申請足夠大的記憶體空間,避免因儲存空間不足,造成資料溢位,導致不必要的程式錯誤甚至崩潰。
在建立順序表時,除了預先申請記憶體空間,還需要實時記錄順序表的長度和順序表本身申請的記憶體大小,便於後期對順序表中的資料元素進行調去。
所以,要自定義順序表的結構:
typedef struct tabletable;
建立順序表,就是順序表進行初始化,在預先申請記憶體空間的同時,給變數size和length賦初值:
table inittable()
t.length=0;//空表的長度初始化為0
t.size=size;//空表的初始化儲存空間為size
return t;
順序表查詢元素-採用順序查詢演算法(普通的遍歷演算法)
//查詢函式,其中elem表示要查詢的資料元素的值
int selecttable(table t,int elem)
//做插入操作時,首先需要看順序表是否有多餘的儲存空間提供給插入的元素,如果沒有,需要申請
if(t.length==t.size)
t.seze+=1;
}//插入操作,需要將從插入位置開始的後續元素,逐個後移
for(int i=t.length-1;i>=add-1;i--)
//後移完成後,直接將所需插入元素,新增到順序表的相應位置
t.head[add-1] = elem;
//由於新增了元素,所以長度+1
t.length++;
return t;
在此程式中,當陣列儲存空間不足時,使用realloc函式每次額外多申請乙個int型的儲存空間,這麼做還不是最優。最好的辦法就是每次發現空間不夠時,多申請幾個記憶體空間,這麼做的好處是:在後續做插入操作過程中不需要每次都執行realloc函式,提高了程式的執行效率
順序表刪除元素
在陣列中刪除元素時,只需將該元素所在位置後的所有元素整體前移1乙個位置即可
前移的過程中被刪除元素被後乙個元素覆蓋掉,簡介實現了刪除操作。
table deltable(table t, int add)
//刪除操作
for(int i=add;i順序表實現的基礎,完全借用了陣列這一資料型別,優點是在對資料進行遍歷時,資料在連續的物理空間中存放,查詢的速度比較快。
但是由於陣列本身限制,在向順序表中新增或者刪除元素時,如果被操作位置後需有很多資料元素,後需所有資料元素都需要前移或者後移,效率比較低。
線性表的順序儲存 線性表的順序儲存結構
1,本文實現乙個線性表 2,順序儲存定義 1,線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表中的資料元素 2,在 c 中可以用乙個陣列作為介質來儲存資料元素 3,設計思路 1,可以用一維陣列實現順序儲存結構 1,儲存空間 t m array 2,當前長度 int m length...
線性表的順序儲存結構 順序表
線性表的順序儲存結構 順序表一.在c c 語言中,借助陣列型別來實現順序表,也就是說,用陣列存放線性表的元素及其邏輯關係,陣列的基本型別就是線性表中元素的的型別,陣列大小 即陣列上界 下界 1 要大於等於線性表的長度,否則該陣列不能存放對應線性表的所有元素。所以當線性表長度小於陣列大小時,該陣列中會...
線性表的順序儲存結構 順序表
什麼是線性表?線性表簡稱表,是n n 0 個具有相同型別的資料元素的有限序列,線性表中資料元素的個數稱為線性表的長度,長度為0的表稱為空表。什麼是順序表?線性表的順序儲存結構稱為順序表。順序表是用一段位址連續的儲存單元依次儲存線性表的資料元素,因為線性表中每個元素的型別相同,通常用一維陣列來實現線性...