多项式的加法实现

//多项式的加法实现
#include <stdio.h>
#include <stdlib.h>

typedef struct _poly {
	int coef;
	int expo;
	struct _poly *next;
}Poly;


typedef struct _polist {
	Poly *head;
	Poly *tail;
}PolyList;

void add_list(int c, int e, PolyList *list) {	//添加多项式的节点
	Poly *p = (Poly *)malloc(sizeof(Poly));
	p->coef = c;
	p->expo = e;
	p->next = NULL;
	if (list->tail) {
		list->tail->next = p;
	}
	else {
		list->head = p;
	}
	list->tail = p;
}

void creat_list(PolyList *list) {	//构建一个多项式链表
	int c = 0;
	int e = 0;
	while (true)
	{
		printf("input the expo and the coef\n");
		scanf("%d %d", &e, &c);
		if (e != -1) {
			add_list(c, e, list);
		}
		else {
			break;
		}
	}
}

int Compare(int a, int b) {
	int i = 2;
	if (a > b) {
		i = 1;
	}
	else if (a < b) {
		i = -1;
	}
	else {
		i = 0;
	}
	return i;
}

void PolyAdd(PolyList p1, PolyList p2, PolyList *pp) {
	int c_sum = 0;
	while (p1.head  && p2.head) {
		switch (Compare(p1.head->expo, p2.head->expo)) {
		case 1:
			add_list(p1.head->coef, p1.head->expo, pp);
			p1.head = p1.head->next;
			break;
		case -1:
			add_list(p2.head->coef, p2.head->expo, pp);
			p2.head = p2.head->next;
			break;
		case 0:
			c_sum = p1.head->coef + p2.head->coef;
			if (c_sum) {
				add_list(c_sum, p1.head->expo, pp);
			}
			p1.head = p1.head->next;
			p2.head = p2.head->next;
			break;
		}
	}
	for (; p1.head; p1.head = p1.head->next) {
		add_list(p1.head->coef, p1.head->expo, pp);
	}
	for (; p2.head; p2.head = p2.head->next) {
		add_list(p2.head->coef, p2.head->expo, pp);
	}
}

void print_list(PolyList list) {	//完成输入后打印整串链表
	Poly *p = (Poly *)malloc(sizeof(Poly));
	for (p = list.head; p; p = p->next) {
		printf("expo: %d  coef:%d\n", p->expo, p->coef);
	}
}

int main() {
	PolyList p1, p2, pp;

	p1.head = p1.tail = NULL;
	p2.head = p2.tail = NULL;
	pp.head = pp.tail = NULL;

	creat_list(&p1);
	printf("The p1 list is:\n");
	print_list(p1);

	printf("\n");
	creat_list(&p2);
	printf("The p2 list is:\n");
	print_list(p2);

	printf("\n");
	PolyAdd(p1, p2, &pp);
	printf("The final pp list is:\n");
	print_list(pp);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/jzjz73/article/details/79339870