【問題描述】編寫乙個程式用單鏈表儲存多項式,並實現兩個一元多項式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.面向結構的程式語言 將程式按照功能...