cpp#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef struct poly { int coeff; int exp; struct poly* next; }*link,Node; void InputPoly(link head); void Print(link head); bool Insert(link head, int coeff, int exp); void Combin2List(link heada, link headb, link headab); void Clear(link head); int main() { link heada, headb; link headab; heada = (link)malloc(sizeof(Node)); heada->next = NULL; headb = (link)malloc(sizeof(Node)); headb->next = NULL; headab = (link)malloc(sizeof(Node)); headab->next = NULL; printf("请输入第一个多项式的系数和指数,以(0,0)结束:\n"); InputPoly(heada); printf("第一个"); Print(heada); printf("请输入第二个多项式的系数和指数,以(0,0)结束:\n"); InputPoly(headb); printf("第二个"); Print(headb); Combin2List(heada, headb, headab); printf("合并为:"); Print(headab); Clear(heada); Clear(headb); Clear(headab); return 0; } void InputPoly(link head) { int coeff, exp; printf("请输入系数和指数(如:\"2 3\"表示2x^3):"); scanf("%d%d", &coeff, &exp); while (coeff != 0 || exp != 0) { Insert(head, coeff, exp); printf("请输入系数和指数:"); scanf("%d%d", &coeff, &exp); } } void Print(link head) { link p = head->next; while (p != NULL) { if (p != head->next && p->coeff > 0) printf("+"); if (p->coeff == -1 && p->exp != 0) printf("-"); if ((p->coeff != 1 && p->coeff != -1) || p->exp == 0) printf("%d", p->coeff); if (p->exp != 1 && p->exp != 0) printf("x^%d", p->exp); if (p->exp == 1) printf("x"); p = p->next; } puts(""); } bool Insert(link head, int coeff, int exp) { link node; link q, p; q = head; p = head->next; node = (link)malloc(sizeof(Node)); node->coeff = coeff; node->exp = exp; node->next = NULL; if (head->next == NULL) { head->next = node; } else { while (p != NULL) { if (node->exp > p->exp) { node->next = p; q->next = node; break; } else if(node->exp < p->exp) { q = p; p = p->next; } else { p->coeff = p->coeff + node->coeff; free(node); break; } } if (p == NULL) q->next = node; } return true; } void Combin2List(link heada, link headb, link headab) { link pa, pb; pa = heada->next; pb = headb->next; while (pa != NULL && pb != NULL) { if (pa->exp > pb->exp) { Insert(headab, pa->coeff, pa->exp); pa = pa->next; } else if (pa->exp == pb->exp) { Insert(headab, pa->coeff + pb->coeff, pb->exp); pa = pa->next; pb = pb->next; } else { Insert(headab, pb->coeff, pb->exp); pb = pb->next; } } while (pa != NULL) { Insert(headab, pa->coeff, pa->exp); pa = pa->next; } while (pb != NULL) { Insert(headab, pb->coeff, pb->exp); pb = pb->next; } } void Clear(link head) { link p = head->next; while (p != NULL) { head->next= p->next; free(p); p = head->next; } free(head); }
多项式加法——C语言
脉牛杂德2024-11-08 10:17
相关推荐
搬砖的小码农_Sky1 小时前
C语言:数组机器视觉知识推荐、就业指导1 小时前
C++设计模式:建造者模式(Builder) 房屋建造案例Swift社区2 小时前
LeetCode - #139 单词拆分Kent_J_Truman2 小时前
greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用先鱼鲨生3 小时前
数据结构——栈、队列一念之坤3 小时前
零基础学Python之数据结构 -- 01篇IT 青年3 小时前
数据结构 (1)基本概念和术语Yang.993 小时前
基于Windows系统用C++做一个点名工具熬夜学编程的小王3 小时前
【初阶数据结构篇】双向链表的实现(赋源码)