单向链表实现合并多项式

#include <stdio.h>
#include <stdlib.h>

typedef struct poly{
	int a;
	int m;
	struct poly *next;       
}polynomial;

//初始化链表头节点
polynomial* init_poly(int a,int m)
{
	polynomial* poly = (polynomial*)malloc(sizeof(polynomial));
	poly->a = a;
	poly->m = m;
	poly->next = NULL;
	printf("addItem(%d,%d)\n",poly->a,poly->m);
	printf("--------------------\n");
	return poly;
}

void addItem(polynomial* poly, int a, int m)
{
	polynomial* p = (polynomial*)malloc(sizeof(polynomial));
	while(poly->next != NULL)
		poly = poly->next; 
	p->next = NULL;
	p->a = a;
	p->m = m;
	poly->next = p;
}

void display(polynomial* poly)
{
	while(poly->next != NULL)
	{
		printf("(%d,%d)\n",poly->a,poly->m);
		poly = poly->next;
		if(poly->next == NULL)
			printf("(%d,%d)\n",poly->a,poly->m);
	}
	printf("--------------------\n");
}

polynomial* findItem(polynomial* poly, int m)
{
	bool find = false;
	while(poly->next != NULL && find == false)
	{
		if(poly->m == m)
		{
			find = true;
			return poly;
		}else{
			poly = poly->next;
			if(poly->next == NULL){if(poly->m == m){find = true;return poly;}}
		}
	}
	return NULL;
}

//把poly2合并到poly1中去 
void addPoly(polynomial* poly1, polynomial* poly2)
{
	polynomial *p;
	polynomial *pFind; 
	do{
		p = poly2;
		pFind = findItem(poly1,p->m);
		if(pFind != NULL)
		{
			pFind->a = p->a + pFind->a;
		}else{
			do{
				if(p->m < poly1->m)
				{
					addItem(poly1,p->a,p->m);
					break;
//					polynomial* tmp = (polynomial*)malloc(sizeof(polynomial));
//					tmp = p;
//					pFind = findItem(poly1,poly1->m);
//					pFind->next = tmp;
//					tmp = pFind->next;
//					tmp->next = tmp;	
				}
				poly1 = poly1->next;
			}while(poly1->next != NULL);
		}
		poly2 = poly2->next;
	}while(poly2 != NULL);
}

int main()
{
	polynomial* poly1 = init_poly(1,2);
	addItem(poly1,2,3);
	addItem(poly1,4,5);
	polynomial* poly2 = init_poly(1,1);
	addItem(poly2,2,2);
	addItem(poly2,1,4);
	display(poly1);
	display(poly2);
	addPoly(poly1,poly2);
	display(poly1);

	return 0;
}

 

posted @ 2019-08-15 16:24  昨夜昙花  阅读(18)  评论(0)    收藏  举报