線性表表示0個或者多個資料元素的有限序列
線性表的特性有:
除第一個元素外,每一個元素均有一個直接前驅
出最後一個元素外,每一個元素均有一個直接後繼
adt list
data
/*線性表的資料對象集合為{a1,a2,...,an},每個元素的類型均為datatype.其中,除第一個元素a1外,
每一個元素有且隻有一個直接前驅元素,除了最後一個元素an外,每一個元素有且隻有一個直接後繼元素。
資料元素直接是一對一的關系。*/
operation
initlist(*l);//初始化操作,建立一個空的線性表
listempty(l);//若線性表為空,傳回true,否則傳回false
clearlist(*l);//清空線性表
getelem(l,i,*e);//查找線性表中的第i個位置的元素值,并指派給e
locateelem(l,e);//查找線性表l中與給定值e相等的元素,如果查找成功,則傳回第一個相同的元素在l
//中的下标;否則,傳回0表示失敗
listinsert(*l,i,e);//線上性表l的第i個位置插入元素e
listdelete(*l,i,*e);//删除線性表l中第i個位置元素,并用e傳回其值
listlength();//傳回線性表l的長度
end adt
實作線性表la和線性表lb的并集操作,結果儲存在la中的僞代碼如下所示:
線性表的順序存儲結構,指的是用一段位址連續的存儲單元依次存儲線性表的資料元素。
數組的長度是存放線性表的存儲空間的長度,存儲空間配置設定後這個量一般是不變的。
線性表的長度是線性表中資料元素的個數,随着線性表的插入和删除,這個量是變化的。
由于順序存儲結構是按照順序存儲的,是以每個資料元素的位址都可以根據第一個元素的位址推算出來。
loc(ai) = loc(a1)+ (i-1)*c
插入操作算法的思路是:
1.如果插入位置不合理,抛出異常.
2.如果線性表長度大于等于數組長度,則抛出異常或者增加數組長度
3.從最後一個元素開始像前便利到第i個位置,分别将它們像後移動一個位置
4.第i個元素位置插入e
5.表長度加1
删除操作的思路是:
1.如果删除位置不合理,抛出異常
2.取出删除元素
針對線性表的先行存儲結構的不足,提出了線性表的鍊式存儲結構
線性表的鍊式存儲結構的資料結構:
6.1 單連結清單的讀取
獲得連結清單第i個資料的算法思路是:
1.聲明一個節點p指向連結清單第一個節點,初始化j從1開始
2.當j< i時,就周遊連結清單,讓p的指針向後移動,不斷指向下一個節點,j累加1
3.若到連結清單末尾p為空,則說明第i個元素不存在
4.否則查找成功,傳回節點p的資料
6.2 單連結清單插入操作
插入操作的思路是:
1.聲明一個節點p指向連結清單頭結點,初始化j從1開始
2.當j<i,周遊連結清單,讓p的指針像後移動,不斷指向下一個節點,j累加1;
4.否則查找成功,在系統中生成一個空節點s
5.将元素e指派給s->data
6.将節點s插入單連結清單
7.傳回成功