順序儲存結構
一、線性表基本概念1.線性表定義線性表(list)是指零個或多個資料元素的有限序列,所有資料元素為相同資料型別且乙個資料元素可以由多個資料項組成。若將線性表記為(a1,..ai-1,ai,ai+1...,an),線性表元素的個數n(n>0,n=0時為空表)定義為線性表的長度,其中ai-1是ai 的直接前驅元素,ai+1是ai的直接後繼元素。2.線性表的抽象資料型別adt 線性表(list)
data
線性表的資料物件集合為,每個元素的型別均勻datatype。其中,除了第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素;除了最後乙個元素an外,每乙個元素有且只有乙個直接後繼元素。資料元素之間的關係是一對一的關係。
operation
initlist(*l):初始化操作,建立乙個空的線性表l;
listempty(l):若線性表為空,返回true,否者返回false;
clearlist(*l):將線性表清空;
getelem(l,i,*e):將線性表l中的第i個位置元素的值返回給e;
locateelem(l,e):**性表l中查詢與給定值e相等的元素,如果查詢成功,返回該元素在表中序號表示成功;否者,返回0表示失敗
listinsert(*l,i,e):**性表l中的第i個位置插入新元素e;
listdelete(*l,i,e):刪除線性表l中的第i個位置元素,並用e返回其值;
listlength(l):返回線性表l的元素個數
注釋:傳遞引數l和*l作用?3.線性表的儲存結構順序儲存結構、鏈式儲存結構
二、線性表的順序儲存結構1.順序儲存定義線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料型別相同的資料元素,在c語言中通常使用一維陣列來實現順序儲存結構。2.順序儲存結構3個屬性(1)儲存空間的起始位置;
(2)資料長度,即指存放線性表的最大儲存容量,儲存分配後這個量是一般是不變的;
(3)線性表長度,即指線性表中資料元素的個數,隨著線性表插入和刪除操作的進行,這個量是變化的。3.順序儲存結構的優缺點(1)優點
a.無須為表示表中元素之間的邏輯關係而增加額外的儲存空間。
b.可以快速的訪問表中任一位置的元素。因為是陣列實現順序儲存,我們可以直接通過陣列下標訪問資料元素。
(2)缺點
a.插入和刪除操作需要移動大量的元素。需要從最後乙個元素開始遍歷,直到需插入或刪除線性表的第i個元素。
b.當線性表長度變化較大時,難以確認儲存空間的容量
c.造成儲存空間的"碎片"。4.順行儲存結構的結構**示例#define maxsize 20 //儲存控制項初始分配空間大小
typedef int elemtype; //elemtype即為int型別,假設資料元素的資料型別為int
typedef struct /*儲存結構的struc結構體*/
sqlist;
其中,sqlist就是struct結構體,如果以後我們需要定義乙個struct結構體物件,可表現為sqlist l。5.順序儲存結構的插入和刪除(1)獲得元素操作
實現操作: getelem(l,i,*e)----將線性表l中的第i個位置元素的值返回給e
演算法思路:因為線性表中的第i位置的資料元素,實際儲存在陣列下標為i-1的儲存單元(陣列下標從0開始),即就是把資料的第i-1下標的值返回即可。
原始碼實現:
/*初始條件---順序線性表l已經存在,且表長小於資料長度(1=l.length)) 為線性表長度
return error;
else
}(2)插入操作
實現操作: listinsert(*l,i,e)----**性表l中的第i個位置插入新元素e
演算法思路:
a.首先判斷非法插入情況:線性表長度大於儲存空間的長度;插入位置不合理;
b.從最後乙個元素開始向前遍歷到第i個位置,分別將它們都向後移動乙個位置;
c.將新元素插入線性表的第i個位置,儲存空間陣列下標為i-1位置;
d.線性表長度加1.
原始碼實現:
/*初始條件---順序線性表l已經存在,且表長小於資料長度(1=length==maxsize) //線性表長度大於資料長度,丟擲異常
return error;
if(i<1 || i>(l->length+1)) //插入位置不再儲存空間段,丟擲異常
return error;
if(i<=l->length) //插入位置符合條件,從最後乙個元素開始向前遍歷到第i個位置
l->data[i-1]=e; //將新元素插入到第i個線性表元素對應的第(i-1)儲存位置
l->length++; //線性表長度加1
return ok;}}
注釋:k資料元素的儲存位置,i表示資料元素**性表的位置
(3)刪除操作
實現操作:listdelete(*l,i,e),刪除線性表l中的第i個位置元素,並用e返回其值
演算法思路:
a.首先判斷非法插入情況:線性表長度大於儲存空間的長度;刪除位置不合理;
b.取出刪除元素
b.從最後乙個元素開始向前遍歷到第i個位置,分別將它們都向前移動乙個位置;
d.線性表長度減1.
原始碼實現:
/*初始條件---順序線性表l已經存在,且表長小於資料長度(1=length==0)
return error;
if(i<1 || i>(l->length+1))
return error;
if(i<=l->length) //插入位置符合條件,從最後乙個元素開始向前遍歷到第i個位置
l->length--; //線性表長度加1
return ok;}}
注釋:k資料元素的儲存位置,i表示資料元素**性表的位置6.順序儲存結構效能分析(1)存、讀資料時間複雜度:線性表的順序儲存結構,在存、讀資料時,不管是哪個位置都是通過陣列下標直接讀存、讀資料元素(執行一次),所以時間複雜度都是o(1);
(2)插入或刪除時間複雜度:線性表的插入或刪除操作都需要從最後乙個元素開始遍歷,直到需插入或刪除線性表的第i個元素。所以,時間複雜度為o(n);
線性表(一) 順序儲存結構
線性表 list 零個或多個資料元素的有限序列。線性表的抽象資料型別 adt 線性表 list data 線性表的資料物件集合為 a1,a2,an 每個元素的型別均為datatype。其中,除第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an外,每乙個元素有且只有乙個直接後繼...
線性表線性(順序)儲存結構
實現順序表的曾刪查操作 元素結構體 define maxsize 100 線性表的最大長度 typedef int elemtype elemtype為線性表元素的型別 typedef struct sequenlist 插入操作 bool insertinseqlist sequenlist l,...
線性表的順序儲存 線性表的順序儲存結構
1,本文實現乙個線性表 2,順序儲存定義 1,線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表中的資料元素 2,在 c 中可以用乙個陣列作為介質來儲存資料元素 3,設計思路 1,可以用一維陣列實現順序儲存結構 1,儲存空間 t m array 2,當前長度 int m length...