69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct
{
int coef;//系数
int index;//指数
}term;
typedef struct Node
{
term data;
struct Node *next;
}Node,*LinkList;
Status InitPoyln(LinkList *l)
{
//【1】构建一个空链表
*l = (LinkList)malloc (sizeof(Node));
(*l)->next = NULL;
return OK;
}
Status CreatPoyln(LinkList *l)
{
//【2】尾插法建立链表
LinkList p,r;
r = (*l);
while (1)
{
p = (Node*)malloc(sizeof(Node));
// printf("请输入多项式的系数和指数:");
scanf("%d %d",&p->data.coef,&p->data.index);
if(p->data.coef == -1&&p->data.index == -1)
break;
r->next = p;
r = p;
}
r->next = NULL; //最后一个节点的next要置为NULL
return OK;
}
Status DestroyPoyln(LinkList *l)
{
//【3】销毁链表
LinkList p,q;
p = (*l)->next;
while (p)
{
q= p->next;
free(p);
p = q;
}
return OK;
}
void PrintfPoyln(LinkList l)
{
//【4】打印链表
LinkList p;
p = l->next;
if(p->data.coef ==0)
{
printf("0\n");
}
else
{
while (p!=NULL)
{
printf("%d %d ",p->data.coef,p->data.index);
p = p->next;
}
}
}
Status LengthPoyln(LinkList l)
{
//【5】链表的长度
int i = 0;
LinkList p;
p = l->next;
while (p)
{
i = i+1;
p = p->next;
}
return i;
}
Status AddPoyln (LinkList *la,LinkList *lb)
{
//【6】多项式相加
LinkList p1,p2,pb1,pb2;
pb1 = (*la);
p1 = pb1->next;
p2 = (*lb)->next;
pb2 = (*lb);
int i;
while(1)
{
if(p1->data.index > p2->data.index)
{
pb1 = p1;
p1 = p1->next;
if(!pb1->next)
{
pb2->next = p2->next;
pb1->next = p2;
break;
}
if(!pb2->next&&!pb1->next)
break;
}
if(p1->data.index == p2->data.index)
{
p1->data.coef = p1->data.coef + p2->data.coef;
pb1 = p1;
p1 = p1->next;
pb2 = p2;
p2 = p2->next;
if(!pb2->next&&!pb1->next)
break;
}
if(p1->data.index < p2->data.index)
{
pb2->next = p2->next;
p2->next = p1;
pb1->next = p2;
pb1 = pb1->next;
p2 = pb2->next;
if(pb2->next == NULL)
break;
if(!pb2->next&&!pb1->next)
break;
}
}
return OK;
}
void main ()
{
LinkList la,lb;
InitPoyln(&la);
InitPoyln(&lb);
CreatPoyln(&la);
CreatPoyln(&lb);
// PrintfPoyln(la);
// PrintfPoyln(la);
AddPoyln(&la,&lb);
DestroyPoyln(&lb);
PrintfPoyln(la);
// PrintfPoyln(lb);
}