多项式相加 链表 C语言

Python072

多项式相加 链表 C语言,第1张

 #include#includestruct node {

int coef //系数

int index //指数

struct node *next

}

//初始化linklist

struct node *init_ll() {

struct node *p

p = (struct node *)malloc(sizeof(struct node)) //为节点指针分配内存空间

p->next = NULL //*为节点的next值赋值为NULL方便表的遍历,作为遍历为结尾的判断条件

return p //返回指针,便于操作

}

//头插法插入linklist

void insert_ll(struct node *head, int coef, int index) {

struct node *p

p = (struct node *)malloc(sizeof(struct node)) //为节点指针分配内存空间

p->coef = coef //实例化系数

p->index = index //实例化指数

p->next = head->next //*该节点的next指针指向head指向的节点

head->next = p //*插入在头指针的后面

}

//打印输出linklist

void reverse_ll(struct node *head) {

struct node *p

p = head->next

while (p != NULL) { //为空时结束循环

printf("%d次项系数为%d ", p->index, p->coef) //打印输出

p = p->next //指针迭代,进行循环输出

}

printf("\n")

}

//销毁linklist释放空间

void destory_ll(struct node *head) {

struct node *p, *q

p = head->next

while (p != NULL) {

q = p

p = p->next

free(q)

}

free(head)

}

//两个多项式进行相加操作

void add_poly(struct node *head1, int length1, struct node *head2, int length2) {

struct node *p1

struct node *p2

if (length1 > length2) {

p1 = head1->next

p2 = head2->next

while (p1 != NULL) {

if (p1->index == p2->index) {

p1->coef = (p1->coef) + (p2->coef)

p2 = p2->next

}

p1 = p1->next

}

}

else {

p1 = head1->next

p2 = head2->next

while (p2 != NULL) {

if (p1->index == p2->index) {

p2->coef = (p2->coef) + (p1->coef)

p1 = p1->next

}

p2 = p2->next

}

}

}

//两个多项式进行相减操作

void sub_poly(struct node *head1, int length1, struct node *head2, int length2) {

struct node *p1

struct node *p2

if (length1 > length2) {

p1 = head1->next

p2 = head2->next

while (p1 != NULL) {

if (p1->index == p2->index) {

p1->coef = (p1->coef) - (p2->coef)

p2 = p2->next

}

p1 = p1->next

}

}

else {

p1 = head1->next

p2 = head2->next

while (p2 != NULL) {

p2->coef = -(p2->coef)

if (p1->index == p2->index) {

p2->coef = (p2->coef) + (p1->coef)

p1 = p1->next

}

p2 = p2->next

}

}

}

main(void) {

struct node *head1 //多项式1   头节点

struct node *head2 //多项式2   头节点

int  index_current = 0 //要输入的指数

int  coef_current = 0 //要输入的系数

int  index_max1 //多项式1   次数

int  index_max2 //多项式2   次数

int  i = 0 //循环控制变量 

head1 = init_ll()

printf("-请输入第一个多项式的次数-\n")

scanf_s("%d",&index_max1)

for (i = 0 i < index_max1 i++) {

printf("-请输入%d次项系数:", index_current)

scanf_s("%d", &coef_current)

insert_ll(head1, coef_current,index_current) //头插法

index_current++

}

head2 = init_ll()

index_current = 0

printf("-请输入第二个多项式的次数-\n")

scanf_s("%d", &index_max2)

for (i = 0 i < index_max2 i++) {

printf("-请输入%d次项系数:", index_current)

scanf_s("%d", &coef_current)

insert_ll(head2, coef_current, index_current) //头插法

index_current++

}

add_poly(head1, index_max1, head2, index_max2) //进行相加操作

//sub_poly(head1, index_max1, head2, index_max2)     //进行相减操作

printf("多项式1的结果为:")

reverse_ll(head1)

printf("多项式2的结果为:")

reverse_ll(head2)

destory_ll(head1)

destory_ll(head2)

getchar()

getchar()

}

#include

#include

typedef

struct

polynode

{

int

conf/*常数*/

int

exp/*指数*/

struct

polynode

*next

}polynode

int

main()

{

polynode

*p,*q,*h

/*建立多项式*/

int

conf,exp

h=(polynode*)malloc(sizeof(polynode))

q=h

scanf("%d

%d",&conf,&exp)

while(conf!=-1||exp!=-1)

{

p=(polynode*)malloc(sizeof(polynode))

p->conf=conf

p->exp=exp

q->next=p

q=p

scanf("%d

%d",&conf,&exp)

}

q->next=NULL

\\你是这里写错了,写成NUll了

q=h

while(q->next!=NULL)

/*求导*/

{

q=q->next

if(q->exp>=1)

{

q->conf=(q->conf)*(q->exp)

q->exp-=1

}

else

if(q->exp==0)

{

q=NULL

}

else

{

printf("error")

break

}

}

q=h

while(q->next!=NULL)/*输出*/

{

q=q->next

printf("%d

%d",q->conf,q->exp)

}

return

0

}

改成这样就能运行了