鍊錶實現細節 個人筆記

2021-10-06 16:24:03 字數 1473 閱讀 2287

設計函式分別求兩個一元多項式的乘積與和。

輸入格式:

輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。

輸出格式:

輸出1行,以指數遞降方式輸出和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。零多項式應輸出0 0。

輸入樣例:

4 3 4 -5 2 6 1 -2 0

3 5 20 -7 4 3 1

輸出樣例:

5 20 -4 4 -5 2 9 1 -2 0

如果多項式的指數是較為稠密的, 可通過陣列來實現. 而如果出現第一項是x的1000次方, 後一項是x的2次方, 如果仍使用陣列會出現空間和時間上的極大浪費, 因此選擇用鍊錶實現.

實現方式是先將兩個多項式以鍊錶的形式建立好, 之後分別從兩多項式最高次項(煉表頭)開始進行比較

如果a多項式當前指數較大, 將該係數和指數存入答案鍊錶中, 並將a多項式的指標後移一位

如果b多項式當前指數較大, 將該係數和指數存入答案鍊錶中, 並將b多項式的指標後移一位

如果兩個多項式當前指數相等, 將係數相加,與當前指數存入答案鍊錶中, 並將二者指標後移一位

當其中乙個多項式的指標指向了null(鍊錶尾節點), 那麼將另一多項式所有後繼節點接到答案鍊錶的尾部.

#include

#include

/*node用來告訴malloc函式該結構體的大小, 而pnode用來定義新建的鍊錶節點(是乙個指向該結構體型別的指標)*/

typedef

struct numbernode,

*pnode;

pnode createlink

(int n)

return head;

}pnode addlink

(pnode head1, pnode head2)

tail1 = tail1->pnext;

tail2 = tail2->pnext;

}else

if(tail1->y > tail2->y)

//兩子多項式指數不相同時, 指數大者直接鏈入結果鍊錶中.

else

tail->pnext = temp;

tail = temp;}if

(tail1 ==

null

)//某一多項式指向null後跳出, 將另一多項式後繼節點鏈入結果鍊錶.

else

//返回結果多項式頭節點.

return head;

}int

main

(void

)else

tail = tail->pnext;

}return0;

}

鍊錶 1 設計鍊錶的一些細節

先說一些設計鍊錶的一些規則和細節 typedef unsigned cnttype typedef char datatype 1 對於鍊錶應當使用乙個頭節點 既不使用資料域的節點如 typedef struct nodenode 也許有人會說這樣會浪費資料空間,但是這樣會簡化演算法相應的也就節省了...

鍊錶 java實現雙向鍊錶

前面已經總結了單向鍊錶,有興趣的兄弟可以進我部落格看一下。大家對比就可以看出,實現同樣的功能單向鍊錶要比雙向鍊錶痛苦的多。所以呀不斷地總結前輩留下的東西,是社會進步的基礎呀。可以直接看linkedlist的原始碼,其就是個雙向鍊錶。一 雙向鍊錶的結構。1 首先節點的結構,其中包含本節點內容,同時需要...

學習筆記 鍊錶 鍊錶入門

重新學習程式語言日記,2011年12月29日 09 17分 定義乙個結構體 struct linkhead,p1,p2 首先定義了乙個結構體,結構體包括指標域,資料域。這個結構體就是你鍊錶裡面的節點。每個節點都包括了資料域,指標域。有了這麼乙個結構體。肯定就需要初始化這個結構體了。寫個函式來初始化鍊...