线性表的应用之多项式的表示与相加
生活随笔
收集整理的這篇文章主要介紹了
线性表的应用之多项式的表示与相加
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
多項式的表示與相加
- 一元多項式的表示
- 一元多項式的建立
- 一元多項式相加
- 一元多項式的打印
- 完整代碼
一元多項式的表示
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,修改結點的系數域。
一元多項式的打印
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; }總結
以上是生活随笔為你收集整理的线性表的应用之多项式的表示与相加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言建立线性表(顺序储存,链式储存,循
- 下一篇: python中解决中文乱码