【数据结构】15 队列应用实例:多项式加法运算

多项式加法运算

我们准备采用不带头节点的单向链表结构表示一元多项式,并按照指数递减的顺序排列各项。

对列表存放的两个多项式进行加法运算时,可以使用两个指针p1和p2。初始时的p1和p2分别指向这两个多项式第1个节点(指数的最高项)。通过循环不断比较p1和p2所指的节点,比较结果为以下三种情况之一并作不同处理。

  1. 两数据项指数相等
    若结果不为0,将结果对应的系数连同指数一并存入结果多项式。沿着两结点的链域,使P1和P2分别指向两个多项式的下一项,再进行新一轮比较。
  2. P1中的数据项指数较大
    P2保持不变,把P1的当前项存入多项式,P1指向下一项。
  3. P2中的数据项指数较大
    P1保持不变,把P2的当前项存入多项式,P2指向下一项。

代码实现

typedef struct PolyNode* PtrToPolyNode;
struct PolyNode {
   
	int Coef;
	int Expon;
	PtrToPolyNode Next;
};
typedef PtrToPolyNode Polynomial;

int compare(int e1, int e2) {
   
	if (e1 > e2) {
   
		return 1;
	}
	else if(e1 < e2)
	{
   
		return -1;
	}
	else
	{
   
		return 0;
	}
}


void Attach(int ceof, int expon, Polynomial* PtrRear) {
   
	Polynomial t;
	t->Expon = expon;
	t->Coef = ceof;
	t->Next = NULL;
	(*PtrRear)->Next = t;
	*PtrRear = t;
}

Polynomial PolyAdd(Polynomial P1, Polynomial P2) {
   
	Polynomial front, rear;
	rear = (Polynomial)malloc(sizeof(struct PolyNode));
	front = rear;
	while (P1 && P2) {
   
		switch (compare(P1->Expon, P2->Expon))
		{
   
		case 1:
			Attach(P1->Coef, P1->Expon, &rear);
			P1 = P1->Next;
			break;
		case -1:
			Attach(P2->Coef, P2->Expon, &rear);
			P2 = P2->Next;
			break;
		case 0:
			int sum = P1->Coef + P2->Coef;
			if (sum) {
   
				Attach(sum, P1->Expon, &rear);
				P1->Next;
				P2->Next;
				break;
			}

		}
	}

	for (; P1; P1 = P1->Next) {
   
		Attach(P1->Coef, P1->Expon, &rear);
	}
	for (; P2; P2 = P2->Next) {
   
		Attach(P2->Coef, P2->Expon, &rear);
	}
	rear->Next = NULL;
	Polynomial temp = front;
	front = front->Next;
	free(temp);
	return front;

}

相关推荐

  1. 数据结构15 队列应用实例多项式加法运算

    2024-02-21 22:16:01       53 阅读
  2. 24/07/18数据结构(7.1220)队列实现

    2024-02-21 22:16:01       24 阅读
  3. 数据结构链表实现多项式相加代码实现(c语言)

    2024-02-21 22:16:01       43 阅读
  4. 【Golang】实现简单队列(Queue)数据结构

    2024-02-21 22:16:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 22:16:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 22:16:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 22:16:01       82 阅读
  4. Python语言-面向对象

    2024-02-21 22:16:01       91 阅读

热门阅读

  1. Liunx安装Dokcer和Docker-Compose

    2024-02-21 22:16:01       48 阅读
  2. Python3 TCP 客户端

    2024-02-21 22:16:01       49 阅读
  3. tcpdump 命令简记录

    2024-02-21 22:16:01       53 阅读
  4. Python实现XML文件转Excel

    2024-02-21 22:16:01       62 阅读
  5. vim 寄存器

    2024-02-21 22:16:01       51 阅读
  6. 算法日记-02完全背包和多重背包问题总结

    2024-02-21 22:16:01       43 阅读
  7. 2. C++ 线程的使用

    2024-02-21 22:16:01       44 阅读
  8. 设计模式(六):模板方法模式(行为型模式)

    2024-02-21 22:16:01       51 阅读