【数据结构】宜宾大学-计院-实验三

news/2024/10/17 22:29:38/

线性表的应用——实现两多项式的相加

  • 课前准备:
  • 实验学时:2
    • 实验目的:
    • 实验内容:
    • 实验结果:
    • 实验报告:(及时撰写实验报告)
      • 实验测试结果:
      • 代码实现:(C/C++)【含注释】

课前准备:

大家跟着我一起读,少壮不努力,没钱打游戏…

———龟虽寿
——东汉末年·曹操
神龟虽寿,犹有竟时;
腾蛇乘雾,终为土灰。
老骥伏枥,志在千里;
烈士暮年,壮心不已。
盈缩之期,不但在天;
养怡之福,可得永年。
幸甚至哉,歌以咏志。

人物简介:曹操(155年-220年正月庚子),字孟德,一名吉利,小字阿瞒,沛国谯(今安徽亳州)人,是东汉末年杰出的政治家、军事家、文学家、书法家。‌ 他也是曹魏政权的奠基者,其子曹丕称帝后,追尊他为武皇帝,庙号太祖‌。
在这里插入图片描述
注释:
1 龟虽寿: 曹操所作乐府组《步出夏门行》中的第四章。
2 神龟: 传说中的通灵之龟,能活几千岁。寿,长寿。
3 竟: 终结,这里指死亡。
4 腾蛇: 传说中龙的一种,能乘云雾升天。
5 骥: 良马,千里马。伏:趴,卧。枥:马槽。
6 烈士: 操有远大抱负的男子。这里专指为革命事业献身的人。暮年:晚年。

译文:

  1. 神龟虽寿,犹有竟时;腾蛇乘雾,终为土灰。
    译:
    神龟虽然十分长寿,但生命终究会有结束的一天;腾蛇尽管能腾云乘雾飞行,但终究也会死亡化为土灰。
  2. 老骥伏枥,志在千里;烈士暮年,壮心不已。
    译:
    年老的千里马虽然伏在马槽旁,雄心壮志仍是驰骋千里;壮志凌云的人士即便到了晚年,奋发思进的心也永不止息。
  3. 盈缩之期,不但在天;养怡之福,可得永年。
    译:
    人寿命长短,不只是由上天决定;调养好身心,就定可以益寿延年。
  4. 幸甚至哉,歌以咏志
    译:
    真是幸运极了,用歌唱来表达自己的思想感情吧。

神龟:传说可以活几千岁…
在这里插入图片描述

实验学时:2

实验目的:

1.掌握线性表的链式存储结构
2.能实现链表的基本操作,包括链表的建立、释放、查找、求长度、查找后继、插入、删除、输出等函数

实验内容:

在这里插入图片描述

实验结果:

每个同学都要记录实验结果(无论对与错),如果程序调试中有什么错误,记录并分析原因,必须另寻时间调试成功。

实验报告:(及时撰写实验报告)

实验测试结果:

在这里插入图片描述

代码实现:(C/C++)【含注释】

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using std::cout;
using std::cin;
using std::endl;//多项式项的两特征
typedef struct
{float coef;//系数int index;//指数
}polydata;//单链表节点
typedef struct SLNode
{polydata data;//自定义类型(多项式的项)struct SLNode* next;
}SLNode, * SLNodePtr;//比较项的指数来达到合并同类型的目的
int cmp(polydata pa, polydata pb)
{if (pa.index > pb.index)return 1;else if (pa.index < pb.index)return -1;elsereturn 0;
}//创建一个多项式,n为多项式的项数
void GreatSLNode(SLNodePtr& polyhead, int n)
{//动态开辟头节点polyhead = (SLNodePtr)malloc(sizeof(SLNode));if (polyhead == NULL) return;polyhead->next = NULL;SLNodePtr rear = polyhead;//尾指针指向头节点polydata tmp;//创建项数为n的多项式for (int i = 1; i <= n; i++){SLNodePtr p = (SLNodePtr)malloc(sizeof(SLNode));if (p == NULL) return;printf("分别输入该多项式第 %d 项的系数与指数\n", i);//scanf_s("%f%d", &tmp.coef, &tmp.index);cin >> tmp.coef >> tmp.index;p->data.coef = tmp.coef;p->data.index = tmp.index;//更新尾节点并记得给尾的next赋NULLrear->next = p;rear = p;rear->next = NULL;}rear->next = NULL;//给尾的next赋NULL
}//两多项式相加并合并同类项
SLNodePtr AddPoly(SLNodePtr pahead, SLNodePtr pbhead)
{//动态开辟头节点并创建尾节点指向头节点SLNodePtr newhead = (SLNodePtr)malloc(sizeof(SLNode));if (newhead == NULL) return NULL;SLNodePtr newrear = newhead;//分别找到两多项式的第一项数据即第一个有效节点SLNodePtr pa = pahead->next;SLNodePtr pb = pbhead->next;SLNodePtr newnode;//创建新节点待用float sum;//相同指数的项系数相加while (pa && pb){switch (cmp(pa->data, pb->data)){case 1://指数不相等项newnode = (SLNodePtr)malloc(sizeof(SLNode));if (newnode == NULL) return NULL;newnode->data.coef = pa->data.coef;newnode->data.index = pa->data.index;//尾插并更新尾newrear->next = newnode;newrear = newnode;pa = pa->next;break;case -1://指数不相等项newnode = (SLNodePtr)malloc(sizeof(SLNode));if (newnode == NULL) return NULL;newnode->data.coef = pb->data.coef;newnode->data.index = pb->data.index;//尾插并更新尾newrear->next = newnode;newrear = newnode;pb = pb->next;break;case 0://指数相等项sum = pa->data.coef + pb->data.coef;if (sum != 0){newnode = (SLNodePtr)malloc(sizeof(SLNode));if (newnode == NULL) return NULL;newnode->data.coef = sum;newnode->data.index = pa->data.index;//尾插并更新尾newrear->next = newnode;newrear = newnode;}pa = pa->next;pb = pb->next;break;}}//将剩余项接在最后if (pa)newrear->next = pa;if (pb)newrear->next = pb;return newhead;
}//打印
void Print(SLNodePtr polynewhead)
{SLNodePtr tmp1 = polynewhead->next;//第一个有效节点while (tmp1){printf("%.2fx^%d", tmp1->data.coef, tmp1->data.index);cout << " + ";tmp1 = tmp1->next;}
}
int main()
{//创建两个节点指针SLNodePtr polyhead1;SLNodePtr polyhead2;cout << "前提条件:输入多项式的“指数大小”随着“项数”的“增多而减小”,否则无法完全合并同类项" << endl;cout << "请输入第一个多项式" << endl;GreatSLNode(polyhead1, 3);cout << endl;cout << "请输入第二个多项式" << endl;GreatSLNode(polyhead2, 2);SLNodePtr newhead = AddPoly(polyhead1, polyhead2);cout << "输出两多项式相加后的各项系数与指数" << endl;Print(newhead);return 0;
}
1+1=2
2+2=4

传送门:


http://www.ppmy.cn/news/1539823.html

相关文章

Golang简介

目录 第一章 go语言起源 第一节 go语言发展 1.知名编程语言或系统的发展简吏 2.Go语言的前世今生 3.go语言的核心特性 4.Go语言的优势和其他语言的对比 5.Go开发环境搭建 第二章 go语言Helloworld 一、go项目工程结构 二、执行go程序 三、go程序的解释说明 第三章 g…

怎么把音频的速度调慢?6个方法调节音频速度

怎么把音频的速度调慢&#xff1f;调慢音频速度不仅可以帮助我们更好地捕捉细节&#xff0c;还能让我们在分析和学习时更加从容。这对于音乐爱好者来说&#xff0c;尤其有助于理解复杂的旋律和和声&#xff0c;使学习过程变得更加高效。而在语言学习中&#xff0c;放慢语速则能…

985研一学习日记 - 2024.10.17

一个人内耗&#xff0c;说明他活在过去&#xff1b;一个人焦虑&#xff0c;说明他活在未来。只有当一个人平静时&#xff0c;他才活在现在。 日常 1、起床6:00√ 2、健身1个多小时 今天练了二头和背部&#xff0c;明天练胸和三头 3、LeetCode刷了3题 旋转图像&#xff1a…

2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数

2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数 2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数 文章目录 2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数KfLowerIrql 函数 KfLowerIrql 函数 /*******************************************************…

EM算法学习

1.EM算法的介绍 可以发现&#xff1a;计算出θA和θB的值的前提是知道A、B币种的抛掷情况。 所以我们需要使用EM算法&#xff1a;求出每轮选择硬币种类的概率 2.EM算法执行过程&#xff1a; 第一步&#xff1a;首先初始化设置一组PA和PB证明的值。然后通过最大似然估计得到每…

【高频SQL基础50题】41-45

又到SQL。 目录 1.列出指定时间段内所有的下单产品 2.学生们参加各科测试的次数 3.即时食物配送 II 4.买下所有产品的客户 5.按分类统计薪水 1.列出指定时间段内所有的下单产品 # Write your MySQL query statement below select t1.product_name,sum(t2.unit) as uni…

AIGC技术的学习 系列一

文章目录 前言一、AIGC技术演进1.1 图像视频生成1.2. 文本生成1.3. 多模态生成1.4. 小结二、CAD&CAE软件介绍2.1. CAD软件2.2. CAE软件2.3. 小结三、AIGC技术与CAD&CAE软件的集成案例3.1. 土建设计领域3.2. 机械设计领域四、结语五、参考文献总结前言 在全球智能制造的…

C#的JSON序列化与反序列化

前言 记录使用C#进行json序列化和反序列化方法 一、序列化 序列化&#xff0c;即将数据组织成某种形式&#xff0c;存储在变量或文件中&#xff0c;是保存数据的一种方式。 下面以数组的形式存放数据&#xff0c;以字典的形式组织数据&#xff0c;将组织好的数据存放在json文…