2025年带表头节点一元多项式的初始化,撤销,相加和相乘操作代码实现c语言

带表头节点一元多项式的初始化,撤销,相加和相乘操作代码实现c语言有需求者可自提 include stdio h include stdlib h include string h typedef struct Node int coef int exp struct Node next Node LinkList typedef string h stdlib h stdio h

大家好,我是讯享网,很高兴认识大家。

有需求者可自提


讯享网

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Node { 
    int coef; int exp; struct Node* next; }Node,*LinkList; typedef struct Head { 
    LinkList head; }Head; void Insert(LinkList Head, int coef, int exp) //一元多项式按降序插入 { 
    LinkList p, p1, p2 = NULL; p1 = Head; while (p1 && (p1->exp == 999 || p1->exp > exp)) { 
    p2 = p1; p1 = p1->next; } if (p1!=NULL&&p1->exp==exp) { 
    p1->coef = p1->coef + coef; } else { 
    p = (LinkList)malloc(sizeof(Node)); p->coef = coef; p->exp = exp; p->next = NULL; p2->next = p; p->next = p1; } } void Init(LinkList Head) //带表头节点的一元多项式的初始化 { 
    int coef, exp,n,k=1; printf("请输入一元多项式一共有多少项: "); scanf_s("%d", &n); printf("请输入一元多项式中第%d个x的系数: ",k); scanf_s("%d", &coef); printf("请输入一元多项式中第%d个x的次方: ",k); scanf_s("%d", &exp); Insert(Head, coef, exp); n--; k++; while (n--) { 
    printf("请输入一元多项式中第%d个x的系数: ",k); scanf_s("%d", &coef); printf("请输入一元多项式中第%d个x的次方: ",k); scanf_s("%d", &exp); k++; Insert(Head, coef, exp); } } void Sort(LinkList Head) //一元多项式按降序排列 { 
    LinkList H; H = Head; LinkList p; p = H->next; H->next = NULL; while (p) { 
    Insert(H, p->coef, p->exp); p = p->next; } } void Print(LinkList Head) // 打印一元多项式 { 
    printf("此多项式如下:\n"); LinkList p1; p1 = Head->next; int num = 0; while (p1) { 
    if (num == 0 && p1->coef > 0) { 
    printf("%dx^%d", p1->coef, p1->exp); } else { 
    if (p1->exp == 0 && p1->coef > 0) { 
    printf("+%d", p1->coef); } else if (p1->exp == 0 && p1->coef < 0) { 
    printf(" %d", p1->coef); } else { 
    if (p1->coef > 0 && p1->coef != 1 && p1->exp != 1) { 
    printf("+%dx^%d", p1->coef, p1->exp); } else if (p1->coef > 0 && p1->coef != 1 && p1->exp == 1) { 
    printf("+%dx", p1->coef); } else if (p1->coef < 0 && p1->coef != -1 && p1->exp != 1) { 
    printf("%dx^%d", p1->coef, p1->exp); } else if (p1->coef < 0 && p1->coef != 1 && p1->exp == 1) { 
    printf("%dx", p1->coef); } else if (p1->coef == 1) { 
    if (p1->exp == 1) { 
    printf("+x"); } else { 
    printf("+x^%d", p1->exp); } } else if (p1->coef == -1) { 
    if (p1->exp == 1) { 
    printf("-x"); } else { 
    printf("-x^%d", p1->exp); } } } } num++; p1 = p1->next; } printf("\n打印完成!\n\n"); } void Add(LinkList Head3,LinkList Head1, LinkList Head2) { 
    LinkList p1,p2,p3=NULL; p1 = Head1->next; int coef, exp; while (p1) { 
    p2 = Head2->next; while (p2) { 
    p3 = NULL; if (p1->exp == p2->exp) { 
    printf("aaaa"); coef = p1->coef + p2->coef; exp = p1->exp; Insert(Head3, coef,exp); break; } p3 = p2; p2 = p2->next; if (p3->next == NULL) { 
    coef = p1->coef; exp = p1->exp; Insert(Head3, coef, exp); } } p1 = p1->next; } p3 = NULL; p2 = Head2->next; LinkList L,L1=NULL; L = Head3->next; while(p2) { 
    p3 = NULL; L = Head3->next; while (L) { 
    if (L->exp == p2->exp) { 
    break; } p3 = L; L=L->next; if (p3->next == NULL) { 
    coef = p2->coef; exp = p2->exp; Insert(Head3, coef, exp); } } p2 = p2->next; } } void multiply(LinkList Head4, LinkList Head1, LinkList Head2) { 
    LinkList p1,p2; p1 = Head1->next; int coef, exp; while (p1) { 
    p2 = Head2->next; while (p2) { 
    coef = p1->coef * p2->coef; exp = p1->exp + p2->exp; Insert(Head4, coef, exp); p2 = p2->next; } p1 = p1->next; } } void Release(LinkList Head) //一元多项式的撤销 { 
    LinkList p1, p2=NULL; p1 = Head; while (p1) { 
    p2 = p1; p1 = p1->next; free(p2); } printf("链表撤销成功!"); } int main() { 
    int coef, exp,judge; printf("请开始准备第一个多项式:\n"); LinkList Head1; Head1 = (LinkList)malloc(sizeof(Node)); Head1->coef = 999; Head1->exp = 999; Head1->next = NULL; Init(Head1); Sort(Head1); Print(Head1); printf("请开始准备第二个多项式:\n"); LinkList Head2; Head2 = (LinkList)malloc(sizeof(Node)); Head2->coef = 999; Head2->exp = 999; Head2->next = NULL; Init(Head2); Sort(Head2); Print(Head2); printf("两个多项式相加为:\n"); LinkList Head3; Head3 = (LinkList)malloc(sizeof(Node)); Head3->coef = 999; Head3->exp = 999; Head3->next = NULL; Add(Head3,Head1, Head2); Sort(Head3); Print(Head3); printf("两个多项式相乘为:\n"); LinkList Head4; Head4 = (LinkList)malloc(sizeof(Node)); Head4->coef = 999; Head4->exp = 999; Head4->next = NULL; multiply(Head4, Head1, Head2); Sort(Head4); Print(Head4); Release(Head1); Release(Head2); Release(Head3); return 0; } 

讯享网

代码运行结果如下:
在这里插入图片描述

小讯
上一篇 2025-02-07 13:17
下一篇 2025-01-07 16:55

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43035.html