日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【数据结构】C++单链表实现多项式加法(直接输入多项式)

發布時間:2024/4/11 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据结构】C++单链表实现多项式加法(直接输入多项式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述:
計算兩個多項式的和。

輸入:
輸入有兩行,每行為一個每項按照指數從大到小順序的多項式,多項式的每一項用mx^n表示,其中系數m為非0整數,指數n是非負整數。

輸出:
輸出兩個多項式相加的結果,要求按照每項的指數,從大到小順序輸出每項。如果某個指數的項在求和運算中系數為0,則不輸出。如果和的每項系數均為0,則這兩個多項式求和為0,結果輸出0。

樣例1輸入:
15x^4+4x^3+7x^1
-7x^1-6x^0

樣例1輸出:
15x^4+4x^3-6x^0

樣例2輸入:
-1x^2-1x^1
1x^2+1x^1

樣例2輸出:
0

(題目來源:njucs.程設實驗.第四周,禁止作業抄襲,轉載請注明出處)


分析:本題重點在于多項式的輸入,這里我采用的是cin.peek()的方式,也就是讓編譯器看一眼緩沖區下一個輸入是否是換行符;然后分別用int和char類型存放數據。多項式加法采取常規算法,用p1,p2兩個指針分別遍歷兩個多項式,分類討論三種情況后放到結果多項式中去,詳見注釋。

代碼如下:


#include<iostream> using namespace std;//定義多項式結構體 struct Poly {int m;//系數int n;//指數Poly* next; };Poly* scanf() {char a, b, c, d, e;Poly* head = NULL;Poly* start = new Poly;//從字符串中讀取多項式系數和指數,對負號做特判if (cin.peek() == '-'){char f;//f='-',a='x',b='^'cin >> f >> start->m >> a >> b >> start->n;start->m = -start->m;}else{//a='x',b='^'cin >> start->m >> a >> b >> start->n;}start->next = head;head = start;Poly* tail = start;if (cin.peek() != '\n'){while (cin >> c){Poly* p = new Poly;cin >> p->m >> d >> e >> p->n;//輸入有負號時將系數置為相反數if (c == '-')p->m = -p->m;//尾插法創建多項式鏈表p->next = tail->next;tail->next = p;tail = p;//采用cin.peek()的方法判斷換行if (cin.peek() == '\n')break;}}return head; }void printf(Poly* head) {//輸出結果為零時做特判if (head == NULL)cout << 0 << endl;else {//第一項要單獨輸出Poly* cur = head;cout << cur->m << "x^" << cur->n;cur = cur->next;while (cur != NULL){//第二項之后系數為負直接輸出,系數為正則要先輸出一個+號if (cur->m < 0)cout << cur->m << "x^" << cur->n;elsecout << "+" << cur->m << "x^" << cur->n;cur = cur->next;}cout << endl;} }Poly* Add_Poly(Poly* head1, Poly* head2) {Poly* head = NULL;Poly* p1 = head1;Poly* p2 = head2;Poly* tail = head;//使用p1,p2兩個指針分別遍歷兩個多項式鏈表,有三種情況://p1所在項指數大于p2,直接尾插入結果多項式鏈表中//p2所在項指數大于p1,同理//所在項指數相等時,系數相加,插入結果鏈表中(若系數等于零不輸出)while (p1 != NULL || p2 != NULL){if (p1->n > p2->n){Poly* p = new Poly;p->n = p1->n;p->m = p1->m;if (tail == NULL){p->next = NULL;head = p;tail = p;}else{p->next = tail->next;tail->next = p;tail = p;}p1 = p1->next;}if (p2->n > p1->n){Poly* p = new Poly;p->n = p2->n;p->m = p2->m;if (tail == NULL){p->next = NULL;head = p;tail = p;}else{p->next = tail->next;tail->next = p;tail = p;}p2 = p2->next;}if (p1->n == p2->n){Poly* p = new Poly;p->n = p1->n;p->m = p1->m+p2->m;if (p->m != 0){if (tail == NULL){p->next = NULL;head = p;tail = p;}else{p->next = tail->next;tail->next = p;tail = p;}}p1 = p1->next;p2 = p2->next;}//其中一個多項式遍歷完之后,將另一個多項式剩余項放入結果中if (p1 == NULL){while (p2 != NULL){Poly* p = new Poly;p->n = p2->n;p->m = p2->m;if (tail == NULL){p->next = NULL;head = p;tail = p;}else{p->next = tail->next;tail->next = p;tail = p;}p2 = p2->next;}}if (p2 == NULL){while (p1 != NULL){Poly* p = new Poly;p->n = p1->n;p->m = p1->m;if (tail == NULL){p->next = NULL;head = p;tail = p;}else{p->next = tail->next;tail->next = p;tail = p;}p1 = p1->next;}}}return head; }int main() {Poly* head1 = scanf();Poly* head2 = scanf();printf(head1);printf(head2);printf(Add_Poly(head1, head2));return 0; }

程序運行結果如下:


總結:多項式問題是數據結構繞不開的問題,但本題和以往問題的不同之處在于多項式是直接從鍵盤上輸入的,需要一個解析字符串并轉換到鏈表的過程,也可以用string類來完成。能力有限,不足之處請指正!

總結

以上是生活随笔為你收集整理的【数据结构】C++单链表实现多项式加法(直接输入多项式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。