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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

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

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

題目描述:
計(jì)算兩個(gè)多項(xiàng)式的和。

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

輸出:
輸出兩個(gè)多項(xiàng)式相加的結(jié)果,要求按照每項(xiàng)的指數(shù),從大到小順序輸出每項(xiàng)。如果某個(gè)指數(shù)的項(xiàng)在求和運(yùn)算中系數(shù)為0,則不輸出。如果和的每項(xiàng)系數(shù)均為0,則這兩個(gè)多項(xiàng)式求和為0,結(jié)果輸出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

(題目來(lái)源:njucs.程設(shè)實(shí)驗(yàn).第四周,禁止作業(yè)抄襲,轉(zhuǎn)載請(qǐng)注明出處)


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

代碼如下:


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

程序運(yùn)行結(jié)果如下:


總結(jié):多項(xiàng)式問(wèn)題是數(shù)據(jù)結(jié)構(gòu)繞不開(kāi)的問(wèn)題,但本題和以往問(wèn)題的不同之處在于多項(xiàng)式是直接從鍵盤上輸入的,需要一個(gè)解析字符串并轉(zhuǎn)換到鏈表的過(guò)程,也可以用string類來(lái)完成。能力有限,不足之處請(qǐng)指正!

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。