单链表实现简单的两个多项式加和

实现两个多项式的加和

是数据结构课程的引例之一,主要使用单链表来实现。有助于有序线性序列(线性表)组织和管理的理解。
本文内容较为简单,实现比较基础,没有考虑到乱序输入等情况,有较大优化空间。

代码

使用C语言实现。

# include <stdio.h>
# include <stdlib.h>
# define STOP -1 

typedef struct _node {
   
	/*
		定义结点结构体,每个节点代表一个输入的单项式 
			int ai为单项式系数
			int exp为单项式指数
			next为指向下一个结点的指针 
	*/ 
	int ai;
	int exp;
	struct _node* next;
} Node;

typedef struct _list {
   
	/*
		定义List结构体,便于在函数中操作结点
			每个List代表一个多项式链表
			head指向该链表的头
			tail指向该链表的任意位置(生成链表时是最新位置) 
	*/ 
	Node* head;
	Node* tail;
} List;

void getpoly(List* plist); // 获取多项式(调用getmo
void getmo(List* plist, int ai, int exp); // 获取单项式 
List polyplus(List* plist_1, List* plist_2); // 加和多项式(调用plusmo、attachmo、moveplist) 
void plusmo(List* plusres, List* plist_1, List* plist_2); // 当单项式指数相等且和不为0时,系数相加
void attachmo(List* plusres, List* plist); // 当单项式指数不同时,直接附加到结果 
void moveplist(List* plist); // 根据运算情况,移动多项式链表中指向单项式的tail指针
void printres(List* plusres); // 根据运算结果,以合理格式输出 
void polyfree(List* plist); // 释放多项式链表的空间 

int main()
{
   
	/*
		获取两个多项式链表 
			定义两个List list
			分别调用getpoly 
	*/ 
	List list_1 = {
   NULL, NULL};
	List list_2 = {
   NULL, NULL};
	puts("请按照第一个多项式指数从大到小输入(系数,指数),没有常数项则以(0, 0)为结尾。");
	getpoly(&list_1);
	puts("请按照第二个多项式指数从大到小输入(系数,指数),没有常数项则以(0, 0)为结尾。");
	getpoly(&list_2);
	/*
		依据输入情况输出运算结果
			如果两个多项式存在有效输入,定义储存结果的多项式链表,调用polyplus计算并输出,最后释放空间
			如果只有list_1存在有效输入,输出list_1
			如果只有list_2存在有效输入,输出list_2
			如果两个多项式输入均无效,则输出提示 
	*/ 
	if (list_1.head && list_2.head) {
   
		List plusres = polyplus(&list_1, &list_2);
		printres(&plusres
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值