70,022
社区成员




#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;
Node *next;
}*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 = (LinkList)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;
}
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;
while (p!=NULL)
{
printf("%d %d \n",p->data.coef,p->data.index);
p = p->next;
}
// if(!p)
// return ERROR;
// return OK;
}
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】多项式相加
printf("到这里了");
LinkList p1,p2,pb1,pc2;
p1 = (*la)->next;
p2 = (*lb)->next;
pb1 = (*la);
pc2 = (*lb)->next;
while(p2)
{
if(p1)
{
p1 = pb1;
}
if(p1->data.index > p2->data.index)
{
pb1 = p1;
p1 = p1->next;
if(p1)
{
pb1->next = p2;
}
}
if(p1->data.index = p2->data.index)
{
p1->data.coef = p1->data.coef + p2->data.coef;
pb1 = p1;
p1 = p1->next;
p2 = p2->next;
pc2 = pc2->next;
}
if(p1->data.index < p2->data.index)
{
p2->next = p1;
pb1->next = p2;
pb1 = p1;
p1 = p1->next;
p2 = pc2->next;
}
}
return OK;
}
void main ()
{
LinkList la,lb;
InitPoyln(&la);
// InitPoyln(&lb);
CreatPoyln(&la);
// CreatPoyln(&lb);
// AddPoyln(&la,&lb);
// DestroyPoyln(&lb);
PrintfPoyln(la);
}
Status CreatPoyln(LinkList *l)
{
//【2】尾插法建立链表
LinkList p,r;
r = (*l);
while (1)
{
p = (LinkList)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;
}
free(p); //需要释放掉p
r->next = NULL; //最后一个节点的next要置为NULL
return OK;
}