設計函式分別求兩個一元多項式的乘積與和。
輸入格式:
輸入分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 首先定義了乙個結構體,結構體包括指標域,資料域。這個結構體就是你鍊錶裡面的節點。每個節點都包括了資料域,指標域。有了這麼乙個結構體。肯定就需要初始化這個結構體了。寫個函式來初始化鍊...