目录
一、实验目的
- 深入了解有序表的基本特性
- 掌握有序表归并算法的思路及其实现算法
- 掌握有序表归并算法的时间复杂度分析
二、实验要求
采用二路归并算法完成两个一元多项式相关运算:
1 创建有序表(可以采用顺序存储或链式存储)
2 输出有序表,显示多项式样式
3 实现两个一元多项式的加法操作,并输出最终结果。
4 实现两个一元多项式的乘法操作,并输出最终结果。(选做,加分项)
三、核心代码
1. 首先定义一个结构体LinkNode,包含系数和指数。然后定义三个函数:InitList用于初始化多项式,DispList用于输出多项式,Addition计算两个多项式的和。
2. 然后创建了三个空的LinkNode指针L1、L2和L3,存储两个多项式和它们的和。然后调用Addition函数计算L1和L2的和,存储在L3中。
bool InitList(LinkNode *&L)
{
L = (LinkNode*)malloc(sizeof(Node));
L->next = NULL;
int i,n;
LinkNode*p=NULL,*q = NULL;
q = L;
printf("方程式一共多少项:\n");//输入多项式的项数
scanf("%d", &n);
printf("输入数据:\n");
for (i=0;i<n;i++) //输入每一项的数据
{
p = (LinkNode*)malloc(sizeof(Node));
printf("系数:");
scanf("%d", &p->coe);
printf("指数:");
scanf("%d", &p->exp);
q->next=p; //将其添加到链表
q=p; //设为链表的尾节点
p=q->next=NULL;
}
return true;
}
bool DispList(LinkNode* L)
{
LinkNode* p = L->next; //从头节点开始遍历
bool judge = true;
while (p) { //遍历链表
if (judge) { //如果是第一个节点
printf("(%dx^%d)", p->coe, p->exp);
judge= false;
}
else {
if(p->exp==0)
printf("+(%d)", p->coe);
else
printf("+(%dx^%d)", p->coe, p->exp);
}
p = p->next;
}
printf("\n");
return true;
}
四、实验记录
实验时输入多组测试数据,粘贴运行结果截图
1.输入 与
:
2.输入 与
3.输入 与
五、总结
二路归并算法是一种常用的多项式相关运算方法,可以用于完成两个一元多项式的加法、减法、乘法等运算。二路归并算法具有较高的效率和稳定性。
二路归并算法的基本原理是将两个一元多项式分别按照指数从高到低进行排序,然后依次比较两个多项式的当前项的指数,将较小的指数对应的项进行相加或相减,得到结果多项式。重复这个过程,直到处理完所有项。
六、完整报告和成果文件提取链接
完整可运行代码以及相关实验报告以下链接可获取:
链接:https://pan.baidu.com/s/1DuGfYm6_KDm04gUKWFSSVQ?pwd=lw6u
提取码:lw6u