線性表:由零個或多個資料元素組成的有限序列。簡單的說,就像排隊一樣,具有先一樣性質的結構。
關鍵:
資料元素的個數稱為線性表的長度,當線性表長度為零時,稱為空表。
表起始位置稱表頭,表結束位置稱表尾。
線性表有兩種物理儲存結構 :順序儲存結構和鏈式儲存結構。
物理上的儲存方式事實上就是在記憶體中找個初始位址,然後通過佔位的形式,把一定的記憶體空間給佔了,然後把相同資料型別的資料元素依次放在這塊空地中。
#define maxsize 20
typedef
int elemtype;
typedef
struct
sqlist;
這裡封裝了乙個結構,事實上就是對陣列進行封裝,增加了當前長度的變數罷了。
順序儲存結構的封裝需要三個屬性:
注意:陣列的長度與線性表的當前長度要區分一下:陣列的長度是存放線性表的儲存空間的總長度,一般初始化後不變。而線性表的當前長度是線性表中元素的個數,是會變化的。
線性表的順序儲存結構,在存、讀資料時,不管是在哪個位置時,時間複雜度都是o(1)。而在插入或刪除時,時間複雜度都是o(n)。
這就說明,它比較適合元素個數比較穩定,不經常插入和刪除元素,而更多的操作是訪問資料的應用。
優點:
為什麼當插入和刪除時,就要移動大量的元素?因為在相鄰兩元素的儲存位置也具有鄰居關係,它們在記憶體中的位置是緊挨著的,中間沒有間隙,當然就無法快速插入和刪除。
//資料元素的插入
status listinsert
(sqlist* l,
int i, elemtype e)
l->data[i -1]
= e;
l->length++
;return ok;
}
資料的刪除:
//資料元素的刪除
status listdelete
(sqlist* l,
int i)
l->length--
;return ok;
}
完整**:
#include
#include
#define maxsize 20
typedef
int elemtype;
typedef
struct
sqlist;
#define ok 1
#define error 0
#define ture 1
#define false 0
typedef
int status;
//資料元素的獲取
status getelem
(sqlist l,
int i, elemtype* e)
//資料元素的插入
status listinsert
(sqlist* l,
int i, elemtype e)
l->data[i -1]
= e;
l->length++
;return ok;
}//資料元素的刪除
status listdelete
(sqlist* l,
int i)
l->length--
;return ok;
}int
main()
//listinsert(l, 1, 4);
listdelete
(l,1);
printf
("%d\n"
, l-
>length)
;for
(i =
0; i < l-
>length; i++
)return0;
}
由於水平有限,部落格難免會有不足,懇請大佬們不吝賜教! 線性表 線性表的順序儲存結構
線性表的順序儲存結構 線性結構是乙個資料元素的有序 次序 集。集合中必存在唯一的乙個 第一元素 集合中必存在唯一的乙個 最後元素 除最後元素外,均有唯一的後繼 除第一元素外,均有唯一的前驅。adt list 資料關係 r1 adt list 容易混的概念 引用符號 和引用型操作沒有關係 加工型操作 ...
線性表 線性表的順序儲存結構
include include using namespace std define ok 1 define error 0 define list init size 100 define listincrement 10 typedef int status typedef int elemty...
線性表 線性表的順序儲存結構
include include using namespace std define ok 1 define error 0 define list init size 100 define listincrement 10 typedef int status typedef int elemty...