二、線性表
引例:多項式的儲存
方法一:順序儲存結構直接表示
用陣列來儲存係數,下標作為指數
缺點:當係數中含有0時,陣列占用空間大且做無效運算
方法二:順序儲存結構表示非零項
用結構陣列同時儲存係數和指數
多項式相加過程:將兩個多項式用指數遞降的順序儲存,依次比較首項的冪大小,相同就相加,不同就輸出指數高的,然後再依次用小的一項比較另乙個多項式的第二項
方法三:鍊錶結構儲存非零項
鍊錶中每個節點儲存多項式中的乙個非零項,包括係數和指數兩個資料域以及乙個指標域
多項式相加過程:將兩個多項式用指數遞降的順序儲存,依次用操作指標指向各個節點比較首項的冪大小,相同就相加,不同就輸出指數高的,然後再依次用小的一項比較另乙個多項式的第二項
線性表:由同型別資料元素構成有序序列的線性結構
表中元素個數稱為線性表的長度
線性表沒有元素時,稱為空表
表的起始位置稱為表頭,表的結束位置稱為表尾
線性表的抽象資料型別描述:
資料物件集:線性表是n(n>=0)個元素構成的有序序列
操作集:線性表l∈list,整數i表示位置,元素x∈elementtype,線性表基本操作主要有:
初始化空表
在表中尋找位置為k的元素
查詢指定元素的位置k
插入刪除
返回線性表長度n
線性表的儲存方法
1.順序儲存:利用結構體陣列的連續儲存空間順序存放線性表的各元素
初始化:
查詢:插入:先要判斷表是否是滿的,再把指定位置後面的元素全部向後挪一位,
從後向前移動,再將x放入目標位置 ,尾指標指向新的最後乙個元素
刪除:先刪除目標元素,再按從左向右的順序向前挪動後面的元素,尾指標指向新的最後乙個元素
返回線性表長度:陣列最後乙個元素下標+1
2.鏈式儲存:利用鍊錶的鏈結建立起資料元素之間的邏輯關係
初始化查詢:(1)按序號查詢:遍曆法,設立操作指標p和計數器i=0,使p從頭指標遍歷至尾指標,依次查詢,查詢條件為p!=null&&idata!=x
插入:鍊錶的插入需要知道前面乙個節點是什麼,所以插入都插在某乙個節點後面,先判斷插入的位置是否為表頭,若是表頭則直接連線後續節點並返回表頭,若不是表頭則開始遍歷,若超出表尾則返回錯誤
刪除:刪除也需要找到前乙個節點,將前乙個節點指向目標節點的下乙個節點,將目標節點釋放,防止記憶體空間洩露,先判斷刪除的是不是頭節點,若是則要判斷頭節點是否為空,若不是則開始遍歷,若超出表尾則返回錯誤
返回線性表長度:遍歷鍊錶,設立操作指標p和乙個計數器i=0,使p從頭指標遍歷至尾指標,計數器依次i+1,迴圈條件為p->next不為null
廣義表引例:一元多項式可用如上方法表示,那麼二元多項式如何表示
分析:將二元多項式看成關於x的一元多項式,則二元多項式可化為係數中包含y的一元多項式,用「複雜」鍊錶表示
廣義表是線性表的推廣
對於線性表而言,n個元素都是基本的單元素
廣義表中,這些元素不僅可以是單元素也可以是另乙個廣義表,由此,乙個域可能為單元素,也可能為乙個指標,因此在c語言中有乙個資料型別「聯合(union)」,union可以把不同資料型別結合在一起,使用標記的方法區別單元素或者指標
多重鍊錶:鍊錶中的節點可能同時隸屬於多個鏈
多重鍊錶中節點的指標域(即乙個節點中包含的指標)可能會有多個,但包含兩個指標域的鍊錶不一定是多重鍊錶,如雙向鍊錶
多重鍊錶有廣泛的用途,如樹、圖這樣相對複雜的資料結構都可以採用多重鍊錶方式實現儲存
資料結構學習筆記(2)線性表
1 2 線性表及其基本運算 3 1。線性表 linear list n個資料元素的有限序列,記為 l a1,a2,an 4 定義 linear list d,r 5 d d0表示相同的資料物件。6 r n 7 8 2.基本運算 9 void initiate l 初始化操作 10 int lengt...
資料結構學習 線性表(2)
編寫乙個程式exp2 2.cpp,實現單鏈表的各種基本運算 假設單鏈表的元素型別為char 並在此基礎上完成如下功能 1 初始化單鏈表h 2 採用尾插法依次插入元素a,b,c,d,e 3 輸出單鏈表h 4 輸出單鏈表h長度 5 判斷單鏈表h是否為空 6 輸出單鏈表h的第3個元素 7 輸出元素a的位置...
資料結構學習筆記 線性表
線性表是零個或多個資料元素的有限序列。線性表的資料物件集合為。其中,除第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an外,每個元素有且只有乙個直接後繼元素。資料元素之間的關係是一對一的關係 線性表的順序儲存結構指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。簡單的說...