- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
桂电数据结构实验指导书
给大家的实验文档中分为一下几部分
1.实验准备:请好好复习C语言,有时间也复习一下C++。
2.c语言实验教案中是一些c语言的基础知识,包括VC环境的使用和程序的调试,希望对c语言已经忘记的同学好好看看复习一下。(程序的编写调试是长年累月的过程,需要不断的积累,写得多了,程序调试的多了,自然就熟练了)
3.文件夹中还有一个名为“CodeBlocks使用简略教程.pdf”的文件,虽然大家对VC6比较熟悉,但是VC6毕竟比较老了,比起别的编译环境没有那么好用了,所以,还请大家学习一下CodeBlocks的使用。当然,实验时候的编译环境由大家自由选择,不强迫大家使用某种编译环境,只是希望大家能学习使用CodeBlocks而已,哈。
4.对应的flash课件:其中是一些实验的flash课件演示,给大家做一下参考
5.实验指导书和实验教案大家在做每个实验前都需要看看。阅读的时候,老版本word可以使用【视图】|【文档结构图】,可以比较自由跳到相应位置。如果是新点的word,通过“视图”选项卡,然后勾选“导航窗格”就可以了。
6. 总体实验难度比较大,时间紧,单靠实验课上的几个学时,作为初学者是无法完成的,需要大家在课前课后尽自己最大的努力。
7.每个实验的代码编写可以用c也可以用c++
8. 文件夹中还有“数据结构实验报告模板v1.0”的文档,实验前做好预习,需要填写好该文档的部分内容,如果有代码,也请贴在其上。实验结束后需要将该文档中的内容补充完整,并打印,于下次实验前交给班长,班长按照学号排好顺序后,下次实验交给实验老师。
实验安排
1、多项式加减法,2学时
2、栈和队列的应用,2学时
3、迷宫,4学时
4、二叉树的建立和遍历,4学时
5、排序,2学时
6、图,2学时
实验一 多项式加减法
一、实验目的
通过实现多项式的加减法,对链表有更深入的了解
二、实验内容
问题描述:
设计一个一元稀疏多项式简单的加减法计算器
实现要求:
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式:
;
(2)输出多项式
(3)多项式A和B相加,建立多项式C=A+B,并输出相加的结果多项式C
(4)选作:多项式A和B相减,建立多项式C=A-B,并输出相加的结果多项式D
方法说明:
(1)多项式的输入与存储
用带表头结点的单链表存储多项式,链表中的每个节点分别存储多项式各项的系数和指数,即每从键盘输入多项式的一对数(系数,指数),可对应建立链表的一个结点。每个节点的结构为:
建立两个链表,其中pa和pb分别为它们的头指针:
Pa
pb
结果链表
Pa(或者是Pc)
Pc
(2)多项式数据类型的定义
struct tagNode
{
float coef;
int exp;
struct tagNode *next;
};
typedef struct tagNode Node;
typedef struct tagNode* pNode;
(3)主要算法
①创建两个链表,分别存放多项式1和多项式2,这两个链表中的节点是按指数降序或者升序排列的
②多项式相加或相减,下面给出多项式相加的部分实现
/*
下面的函数实现两个多项式的相加,要相加的链表分别由pa和pb指向(其中,pa,pb都是分配了空间的头结点)。
相加的结果直接由pa指向的链表保存,即是在pa链表中添加或删除(当系数因为相加为0的情况下)一些结点,构成结果。
这里要相加的链表中指数都是按从小到大的顺序排列好了的,是升序链表。
*/
void add_poly(Node *pa,Node *pb)
{
Node *p=pa-pNext;//链表1,将来的结果也放在此
Node *q=pb-pNext;//链表2
Node *pre=pa;
Node *u;//临时用
float x;
while (p!=NULL q!=NULL)//当两个链表都不为空
{
if (p-expq-exp)//比较链表1跟链表2当前节点的指数大小,链表1也是存放结果的地方
{
pre=p;
p=p-pNext;//p指向要比较的下一个结点。pre指向的是结果链表的最后一个结点。
}
else if (p-exp==q-exp)//假如链表1和链表2的指数相等,就要系数相加
{
x=p-coef+q-coef;
if (x!=0)//相加后的系数不为0,有必要保留一个结点就可以了
{
p-coef=x;
pre=p;
}
else//如果相加后,系数不是0,不需要保留任何一个结点,在这里删除链表1的结点,下面删除链表2的结点
{
pre-p
文档评论(0)