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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性表的应用之多项式的表示与相加

發布時間:2025/3/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性表的应用之多项式的表示与相加 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多項式的表示與相加

  • 一元多項式的表示
  • 一元多項式的建立
  • 一元多項式相加
  • 一元多項式的打印
  • 完整代碼

一元多項式的表示

typedef struct ploy {double coef; //系數部分int exp; //指數部分struct ploy* next; }ploy;

一元多項式的建立

輸入的格式是 1+2x^1+2x^2這樣的格式以#結束。

ploy* create_ploy() {ploy* head,*s,*p;head = (ploy*)malloc(sizeof(ploy));head->next = NULL;s = head;char ch;int flag = 0; //記錄的是除了數字與+之外輸入的字母個數int key = 2;//標記正負p = (ploy*)malloc(sizeof(ploy));while (~scanf_s("%c", &ch,1)) {if (ch == '#')break;if (ch == '+'||ch =='-') {if (flag == 1) //表明輸入的是7x這樣的情況s->exp = 1; //x指數尾1的情況p = (ploy*)malloc(sizeof(ploy)); //建立新節點flag = 0;if (ch == '+')key = 1;elsekey = 0;}if (isdigit(ch)) {if (flag == 0) {if(key)p->coef = ch - '0';else if(key ==0)p->coef = -(ch - '0');p->exp = 0; //默認指數是-1s->next = p;s = p;}else if (flag == 2) //指數不為0s->exp = ch - '0';}else if(ch!='+'&&ch!='-')flag++;//記得加上}s->next = NULL; //最后一個結點指向空return head; }

一元多項式相加

實質是:

  • 指數不同是鏈表的合并
  • 指數相同,系數相加;若為0,去掉該結點;若不為0,修改結點的系數域。
ploy* add(ploy* La, ploy* Lb) {ploy* pa, * pb, * pc,*q,*head;head = (ploy*)malloc(sizeof(ploy));head->next = NULL;pc = head;pa = La->next;pb = Lb->next;while (pa && pb) {if (pa->exp == pb->exp) { //指數相同pa->coef = pa->coef + pb->coef; //系數相加if ((int)pa->coef == 0) { //系數相加為0q = pa; //刪除pa指向的結點pa = pa->next;free(q);}else //系數相加不為0{pc->next = pa;pc = pa;pa = pa->next;}q = pb; //刪除pb所指的結點pb = pb->next;free(q);}else if (pa->exp < pb->exp) {pc->next = pa;pc = pa;pa = pa->next;}//將pa所指的結點合并,pa指向下一個結點else {pc->next = pb;pc = pb;pb = pb->next;}//將pb所指的結點合并,pb指向下一個結點}//那個鏈沒有處理完,就處理if (pa)pc->next = pa; else pc->next = pb;return head; }

一元多項式的打印

void show(ploy* head) {ploy* p = head->next;while (p->next) {if (p->coef > 0.0) { //分為正負打印if (p->exp == 0)printf("+%.2lf", p->coef);else if (p->exp == 1)printf("+%.2lfx", p->coef);elseprintf("+%.2lfx^%d", p->coef, p->exp);}else {if (p->exp == 0)printf("-%.2lf", p->coef);else if (p->exp == 1)printf("-%.2lfx+", p->coef);elseprintf("-%.2lfx^%d+", p->coef, p->exp);}p = p->next;}//最后一個if(p->coef>0.0)printf("+%.2lfx^%d\n", p->coef, p->exp);elseprintf("-%.2lfx^%d\n", p->coef, p->exp);}

完整代碼

#include<stdio.h> #include<malloc.h> #include<string.h> #include<ctype.h> typedef struct ploy {double coef; //系數部分int exp; //指數部分struct ploy* next; }ploy;ploy* create_ploy() {ploy* head,*s,*p;head = (ploy*)malloc(sizeof(ploy));head->next = NULL;s = head;char ch;int flag = 0; //記錄的是除了數字與+之外輸入的字母個數int key = 2;//標記正負p = (ploy*)malloc(sizeof(ploy));while (~scanf_s("%c", &ch,1)) {if (ch == '#')break;if (ch == '+'||ch =='-') {if (flag == 1) //表明輸入的是7x這樣的情況s->exp = 1; //x指數尾1的情況p = (ploy*)malloc(sizeof(ploy)); //建立新節點flag = 0;if (ch == '+')key = 1;elsekey = 0;}if (isdigit(ch)) {if (flag == 0) {if(key)p->coef = ch - '0';else if(key ==0)p->coef = -(ch - '0');p->exp = 0; //默認指數是-1s->next = p;s = p;}else if (flag == 2) //指數不為0s->exp = ch - '0';}else if(ch!='+'&&ch!='-')flag++;//記得加上}s->next = NULL; //最后一個結點指向空return head; }ploy* add(ploy* La, ploy* Lb) {ploy* pa, * pb, * pc,*q,*head;head = (ploy*)malloc(sizeof(ploy));head->next = NULL;pc = head;pa = La->next;pb = Lb->next;while (pa && pb) {if (pa->exp == pb->exp) { //指數相同pa->coef = pa->coef + pb->coef; //系數相加if ((int)pa->coef == 0) { //系數相加為0q = pa; //刪除pa指向的結點pa = pa->next;free(q);}else //系數相加不為0{pc->next = pa;pc = pa;pa = pa->next;}q = pb; //刪除pb所指的結點pb = pb->next;free(q);}else if (pa->exp < pb->exp) {pc->next = pa;pc = pa;pa = pa->next;}//將pa所指的結點合并,pa指向下一個結點else {pc->next = pb;pc = pb;pb = pb->next;}//將pb所指的結點合并,pb指向下一個結點}//那個鏈沒有處理完,就處理if (pa)pc->next = pa; else pc->next = pb;return head; }void show(ploy* head) {ploy* p = head->next;while (p->next) {if (p->coef > 0.0) { //分為正負打印if (p->exp == 0)printf("+%.2lf", p->coef);else if (p->exp == 1)printf("+%.2lfx", p->coef);elseprintf("+%.2lfx^%d", p->coef, p->exp);}else {if (p->exp == 0)printf("-%.2lf", p->coef);else if (p->exp == 1)printf("-%.2lfx+", p->coef);elseprintf("-%.2lfx^%d+", p->coef, p->exp);}p = p->next;}//最后一個if(p->coef>0.0)printf("+%.2lfx^%d\n", p->coef, p->exp);elseprintf("-%.2lfx^%d\n", p->coef, p->exp);}int main() {ploy* head,*head1,*head2;head1 = create_ploy();getchar();head2 = create_ploy();show(head1);show(head2);head = add(head1, head2);show(head);return 0; }

總結

以上是生活随笔為你收集整理的线性表的应用之多项式的表示与相加的全部內容,希望文章能夠幫你解決所遇到的問題。

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