数据结构与算法学习笔记——多项式的链表实战

数据结构与算法学习笔记(C语言)

多项式的链表实现

定义:在数学上,形如
多项式
的式子叫做一元多项式,包括系数a、b、c、d…还有幂次0、1、2、3…
根据多项式的特征,我们可以定义一个链表,让节点的数据域放系数和幂次,然后让next指针域指向下一个更高幂次的节点
抽象数据类型多项式Polynomial的实现

typedef struct term {
   
	int coef; /*系数*/
	int expn;	/*幂次*/
	struct term *next; /*next指针*/
}term, *Polynomial;

其中,term是项,即多项式系数连带幂次,项与项之间用next指针穿起来组成一元多项式,Polynomial是term *类型,也就是指向项的指针,这里我们把它固定为头指针,其他项的指针用term *以便区分

/*基本操作的函数原型说明*/
void CreatePolyn(Polynomial *p, int m);
/*输入m项的系数和指数,建立一个表示一元多项式的链表*/
void DestroyPolyn(Polynomial *p);
/*销毁多项式*/
void PrintPolyn(Polynomial p);
/*打印一元多项式*/
int PolynLength(Polyonmial p);
/*返回一元多项式的项数*/
void AddPolyn(Polynomial *pa, Polynomial *pb);
/*多项式相加,pa = pa + pb,销毁pb*/
void SubPolyn(Polynomial *pa, Polynomial *pb);
/*多项式相减,pa = pa -pb,销毁pb*/
void MulPolyn(Polynomial *pa, Polynomial *pb, Polynomial *pc);
/*多项式相乘,pc = pa * pb,销毁pa,pb*/

接下来,用C语言代码对上述操作进行实现

1.创建多项式链表

/*我们假定用户输入的数据都合法并且有效,先创建一个简易的一元多项式链表
假定用户按照规定:输入的每组系数、指数都是整数,并且系数不为0,指数是自然数,
按照每项指数不等,且升幂次序输入*/
void CreatePolyn(Polynomial *p, int m)
	/*输入m项的系数和指数,尾插法建立一元多项式的有序链表*/
{
   
	term *q, *r; int i; int coe; int exp;
	/*初始化多项式链表,即创建一个只含有头节点的链表*/
	*p = (Polynomial)malloc(sizeof(term));
	(*p)->coef = 0(*p)->expn = -1;
	(*p)->next = NULL;	
	q = *p;
	/*让q始终指向尾节点*/
	/*插入各项*/
	printf("请以coef, expn的格式依次输入每一项的系数和指数:\n");
	for (i = 0; i < m; i++) {
   
		scanf("%d, %d", &coe, &exp);
		r = (term *)malloc(sizeof(term));
		r->coef = coe;
		r->expn = exp;
		r->next = NULL;
		q->next = r;
		q = r;
	}
}				

2.销毁多项式链表

void DestroyPolyn(Polynomial *p) 
{
   
	term *q, *r;
	q = (

你可能感兴趣的:(数据结构,链表,算法,c语言)