資料結構Week2 1 線性表的順式和鏈式表達

2021-10-03 04:35:07 字數 2343 閱讀 5445

目錄

1、問題引入:如何表示多項式:

2、線性表 :

2.1主要操作實現:

2.2線性表的鏈式儲存實現

2.3總結:

3.問題引入:如何表示二元多項式

3.1廣義表

3.2多重鍊錶

方法一:陣列分量對應多項式各項:

a[ i ]=表示第 i 項數的係數,下表表示次數

?缺點:陣列不能太大,浪費空間

方法二: 順序儲存結構表示非零項,

相加過程:從頭開始,比較兩個多項式當前對應項的指數,返回指數大的,如果兩指數相等,則返回係數和。類似歸併排序的那種思路。

方法三:鍊錶結構儲存非0項。

同型別資料元素構成有序序列線性結構

len(list)=元素個數

沒有元素時,為空表

表頭 // 表尾

typedef struct lnode *list;

struct lnode

;struct lnode l;

list ptrl; //指標

/*訪問下標為i的元素:l.data[i]

線性表的長度:l.last+1

*/

2.1.1初始化(建立空的順序表):

list makeempty()

2.1.2查詢(平均時間複雜度o(n/2))

int  find(elementtype x,list ptrl)

2.1.3 插入(倒著移動)

void insert(elementtype x,int i,list ptrl)

if( i <1 || i > ptrl.last+2 )

for(j = ptrl.last;j>=i-1;j--)//倒著來新增

ptrl.data[i-1]=x;

ptrl.last++;

return ;

}

}

2.1.4刪除

void delete(elementtype x,int i,list ptrl)

for(j = i;j<=ptrl.last;j++)//倒著來新增

ptrl.last--;

return ;

}

}

不要求邏輯上相鄰的兩個元素物理上也相鄰。

2.2.1求表長(o(n))

int length(list ptrl)

return j;

}

2.2.2查詢

//按序號找

list findkth(int k,list ptrl)

p = findkth(i-1,ptrl);

if(p==null)

else

2.2.4:刪除

list delete(int i,list ptrl)

p = findkth(i-1,ptrl);

if(p==null)

else if (p.next ==null)

else

順序查詢第k個元素,o(1)借助下表表示順序

鏈式查詢為o(k);鏈式不借助下標表示順序

廣義表是線性表的推廣,對於data,不僅僅是簡單型別,還可以是指標等型別

結點的指標域會有多個(但包含兩個指標域的鍊錶不一定是多重鍊錶,比如雙向鍊錶)

可以用來儲存『稀疏二維陣列』//行列式

資料結構 2 1線性表及其實現

線性結構是資料結構裡面最基礎最簡單的一種資料結構型別,最典型的一種叫做線性表。舉個例子 如何用程式語言來表示這樣的乙個一元多項式及其相應的操作運算呢?順序儲存結構直接表示 用乙個陣列儲存第i項的係數ai,而指數對應這個分量的下標 這樣帶來的問題是什麼呢?假如我要表示x的兩千次方,陣列的大小就需要20...

資料結構2 1 線性表及其實現

操作集 線性表 list,元素x elementtype,線性表的基本操作有 線性表的順序儲存實現 typedef struct lnode list struct lnode struct lnode l list ptrl 訪問下標為i的變數 l.data i ptrl data i 返回線性表...

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...