資料結構之多項式相加

2021-09-13 04:04:27 字數 1997 閱讀 5510

【問題描述】編寫乙個程式用單鏈表儲存多項式,並實現兩個一元多項式a與b相加的函式。a,b剛開始是無序的,a與b之和按降序排列。例如:

多項式a: 1.2x^0 2.5x^1 3.2x^3 -2.5x^5

多項式b: -1.2x^0 2.5x^1 3.2x^3 2.5x^5 5.4x^10

多項式a與b之和:5.4x^10 6.4x^3 5x^1

【輸入形式】任意兩個多項式a和b的項數及對應的係數和指數,要查詢的第幾項

【輸出形式】多項式中某一項的係數與指數,係數保留一位小數

【輸入樣例】

4 1.2 0 2.5 1 3.2 3 -2.5 5

5 -1.2 0 2.5 1 3.2 3 2.5 5 5.4 10

2【輸出樣例】

6.4 3

【樣例說明】

第乙個多項式的係數與指數對,以空格隔開

第二個多項式的係數與指數對,以空格隔開

輸出第2項的係數與指數,係數與指數間用空格隔開,係數保留一位小數

【評分標準】必須用鍊錶實現

嗯說實話這個題敲了一下午都沒敲出來,我自己要反思一下。原因有很多,只找自己的問題吧。

比如非常浮躁,沒沉下心,也沒有認真思考,認真審題。題目都沒看清。首先題目要求的是兩個指數無序的序列,所以會需要排序。再者要求的輸出,不是合併相加之後的多項式各個指數還有係數,而是第幾個。嗯這些我都沒看,直接就敲了,結果可想而知,那就是究極自閉。而且我用了花裡胡哨的方法,因為不久前看了看某大的mooc正好講了多項式相加,於是就套用了那個方法,還是沒有熟練掌握,具體細節也沒明白所以**了。

到最後很多人都敲出來了,我才悔改,用最為樸實無華的常規思路進行求解。但中間的問題太多了,感覺自己能力還差了很多,還需更長遠的修煉。

#include#includetypedef struct node*list;

struct node;

list create()//最基本的構建其實是最好的方法 我也不多說了

r->next = null;

return head;

}list sort(list head)//這是乙個排序的函式

}return head;

}list add(list a,list b)//排好序的多項式相加

else if(p->expon>q->expon)

else

else}}

if(p == null &&q == null)

r->next = null;

if(p!=null)

if(q!=null)

return c;

}void show(list l)//輸出函式

printf("%.1f %d",p->coef,p->expon);//這個格式十分重要啊

printf("\n");

}int main()

sort函式想用氣泡排序+只有值交換而不是指標的改變但是系統不讓我過啊,這就很難受了,大家也可以嘗試一下使用我最初的方法。其實我感覺氣泡排序更通俗易懂 用雙重for迴圈然後一直遍歷比較就好了;

add函式我用的方法複雜了,我的方法是建立新的鍊錶,然後不停建立新結點。其實只要乙個指標然後指向就好了;

list add(list a,list b)

else if(p->expon < q->expon)

else

else

}r->next = null;

} if(p != null)

r->next = p;

if(q != null)

r->next = q;

return a;

}

資料結構之多項式(C )

資料結構多項式,運用到類的複製建構函式,靜態成員等基礎知識,簡單實現了加法和乘法運算,但是對乘法 複雜度比較高 暫時做這樣處理。對於多項式的構成這些不做多餘介紹。本 純手工製作,難免有不足之處。標頭檔案 polynomial h ifndef polynomial h define polynomi...

資料結構 1 3 多項式相加

其實這個還是有點問題的,在偶見情況下會列印出0 x,目前無解唔。原理就是借用線性表,然後做運算直接先插入到後面。然後遍歷一下,只要指數相同就合併在前面乙個裡面,後面的歸0 不刪除 列印的時候加乙個判斷是否為0的條件就行了。下面是原始碼 include include using namespace ...

資料結構 鍊錶,多項式相加

指標真的是蠻重要的,基礎不牢怨不得別人,鍊錶差點給我學自閉,尤其是資料結構演算法這塊 下面分享乙個很簡單的鍊錶應用 多項式相加 ps 多項式錄入還不完善,故只能按指數從小往大挨個順序輸入 水平較差請多諒解,應用基礎 c 雖然可讀性不高但耐心點初學者應該都能讀懂 1.面向結構的程式語言 將程式按照功能...