0
点赞
收藏
分享

微信扫一扫

链表的运用—多项式相加减

杰森wang 2022-05-05 阅读 29

一、头文件

二、链表结构

三、链表的初始化

四、链表的打印

五、插入元素

六、多项式相加

七、测试函数

八、main函数

九、测试结果

十、总结

一、头文件

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

二、、链表结构

typedef struct LinkNode
{
	int coef;
	int expon;//指数 
	struct LinkNode *next;
}*LinkList,*NodePtr;

三、链表的初始化

//链表的初始化
LinkList initLinkList()
{
	NodePtr headNode = (NodePtr)malloc(sizeof(struct LinkNode));
	headNode->coef = 0;
	headNode->expon = 0;
	headNode->next = NULL;
	return headNode; 
} 

四、打印链表

//打印链表 
void printList(LinkList list)
{
	NodePtr p = list->next;
	
	while(p!=NULL)
	{
		printf("%d * 10^%d+",p->coef ,p->expon );
		p = p->next;
	}
	printf("\n");
}

五、插入元素

//插入元素
void appendElement(LinkList list,int newcoef,int newexpon)
{
	NodePtr p,q;
	
	q = (NodePtr)malloc(sizeof(struct LinkNode));
	q->coef = newcoef;
	q->expon = newexpon;
	q->next = NULL;
	p = list;
	
	while(p->next!=NULL)
	{
		p = p->next;
	}
	p->next = q;//将q接到p后面 
} 

六、多项式相加减

//多项式相加 
void addList(NodePtr paraList1,NodePtr paraList2)
{
	NodePtr p,q,r,s;
	
	p = paraList1->next;
	q = paraList2->next;
	r = paraList1;
	free(paraList2);
	
	while((p != NULL)&&(q != NULL))
	{
		
		if((p->expon) < (q->expon) )
		{
			r = p;
			p = p->next ;
		}
		else if(p->expon == q->expon )
		{
			p->coef = p->coef + q->coef ;
			if(p->coef !=0)
			{
				r = p;
				p = p->next;
				s = q;
				q = q->next;
				free(s);
			}
			else if(p->coef == 0)
			{
				s = q;
				q = q->next;
				free(s);
				s = p;
				p = p->next ;
				free(s);
			}
		}
		else if((p->expon) > (q->expon ))
		{
			r->next = q;
			r = q;
			q = q->next; 
		}
	}
	if(p==NULL)
	{
		r->next = q;
	}
	else
	{
		r->next = p;
	}
	printf("Addition ends.\n");
}

七、测试函数

void additionTest(){

	LinkList tempList1 = initLinkList();
	appendElement(tempList1, 7, 0);
	appendElement(tempList1, 3, 1);
	appendElement(tempList1, 9, 8);
	appendElement(tempList1, 5, 17);
	printList(tempList1);
    LinkList tempList2 = initLinkList();
	appendElement(tempList2, 8, 1);
	appendElement(tempList2, 22, 7);
	appendElement(tempList2, -9, 8);
	printList(tempList2);
	printf("\n");
	addList(tempList1, tempList2);
	printList(tempList1);
}

八、main函数

void main(){
	additionTest();
	printf("Finish.\r\n");
}

九、测试结果 

 

 

十、总结

细节问题,一定要注意到,同时注意要分情况讨论问题,很多问题表面看起来不好下手,但实际上当分成了多个模块,一个模块地区探究,就会发现轻松了许多,俗称大事化小,同时困惑时画图帮助。

举报

相关推荐

0 条评论