天天看點

大話資料結構之三:線性表1.定義:2.線性表抽象資料類型3.順序存儲結構4.順序存儲結構的操作6.線性表的鍊式存儲結構

線性表表示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.順序存儲結構4.順序存儲結構的操作6.線性表的鍊式存儲結構

插入操作算法的思路是:

1.如果插入位置不合理,抛出異常.

2.如果線性表長度大于等于數組長度,則抛出異常或者增加數組長度

3.從最後一個元素開始像前便利到第i個位置,分别将它們像後移動一個位置

4.第i個元素位置插入e

5.表長度加1

删除操作的思路是:

1.如果删除位置不合理,抛出異常

2.取出删除元素

大話資料結構之三:線性表1.定義:2.線性表抽象資料類型3.順序存儲結構4.順序存儲結構的操作6.線性表的鍊式存儲結構

針對線性表的先行存儲結構的不足,提出了線性表的鍊式存儲結構

線性表的鍊式存儲結構的資料結構:

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.傳回成功

繼續閱讀