南邮数据结构实验一.docx

上传人:b****2 文档编号:24607130 上传时间:2023-05-29 格式:DOCX 页数:14 大小:575.25KB
下载 相关 举报
南邮数据结构实验一.docx_第1页
第1页 / 共14页
南邮数据结构实验一.docx_第2页
第2页 / 共14页
南邮数据结构实验一.docx_第3页
第3页 / 共14页
南邮数据结构实验一.docx_第4页
第4页 / 共14页
南邮数据结构实验一.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

南邮数据结构实验一.docx

《南邮数据结构实验一.docx》由会员分享,可在线阅读,更多相关《南邮数据结构实验一.docx(14页珍藏版)》请在冰豆网上搜索。

南邮数据结构实验一.docx

南邮数据结构实验一

 

实验报告

(2016/2017学年第一学期)

 

课程名称

数据结构A

实验名称

线性表的基本运算及多项式的算术运算

实验时间

2017

3

22

指导单位

计算机学院计算机科学与技术系

指导教师

邹志强

 

学生姓名

吴爱天

班级学号

B15040916

学院(系)

计算机学院

专业

信息安全

 

实验报告

实验名称

线性表的基本运算及多项式的

算术运算

指导教师

邹志强

实验类型

验证

实验学时

2+2

实验时间

一、实验目的和要求

(1)深入理解线性表数据结构,掌握线性表的顺序和链接两种存储表示方法.

(2)熟练掌握顺序表的各种基本操作

(3)学会使用顺序表解决应用问题的方法

(4)加深对抽象模板类,类的继承,代码重用,重载等C++语言机制的理解和使用.

二、实验环境(实验设备)

(1)硬件:

MAC

(2)操作系统:

macOS

(3)Xcode

三、实验原理及内容

(1)线性表操作

1在顺序表类SeqList中增加成员函数voidReverse(),实现顺序表的逆转.

2在顺序表类SeqList中增加成员函数boolDeleteX(constT&x),删除表中所有元素值等于x的元素.若表中存在这样的元素,则删除之,且函数返回true,否则函数返回false.

3编写main函数,调用上述新增函数.

(2)一元多项式的相加和相乘

1设计带表头结点的单链表表示的多项式类,在该类上定义和实现教材2.4节中程序2.7的多项式类上的各个运算.

2在该类上增加成员函数voidPolyMul(Polynominal&r),并重载*运算符.

3实现菜单驱动的main函数,测试多项式类上的各个运算,输入多项式,显示多项式,多项式加法和乘法运算.

一、线性表操作

1、在顺序表类SeqList中增加成员函数voidReverse(),实现顺序表的逆转.

三个主要类为LinearList、SeqList、SingleList,继承关系如下

 

实验报告

●顺序表逆转

template

voidSeqList:

:

Reverse(){

T*elementsTemp;

elementsTemp=newT[n];

intnCopy=n;

intj=0;

while(nCopy>0){

elementsTemp[j]=elements[nCopy-1];

nCopy--;

j++;

}

for(inti=0;i

elements[i]=elementsTemp[i];

}

}

注释:

主要的思路为,新建一个elementsTemp[]数组,SeqList依次从尾部向前扫描,每个数组内的数据依次赋给elementsTemp[],最后在从前向后讲elementsTemp[]内的值一一吧SeqList内值覆盖,完成操作,比较简单,复杂度为O(n)级别。

2、在顺序表类SeqList中增加成员函数boolDeleteX(constT&x),删除表中所有元素值等于x的元素.若表中存在这样的元素,则删除之,且函数返回true,否则函数返回false.

●删除所有值为X的元素

注释:

主要思路为,依次查找SeqList内的元素,每次都与X的值进行依次对比,如果相同则删除,不同则继续向下扫描,知道SeqList末尾,最后用Search()来检验是否删除干净,复杂度也为O(n).

 

●测试样例

Reverse()

如图,原数据为74973583072,逆转过后为

72305873497,符合预期。

DeleteX()

如图,原数据中有3个0,输出结果中已经没有0,已经删除干净,符合预期。

实验报告

二、一元多项式的相加和相乘

1、设计带表头结点的单链表表示的多项式类,在该类上定义和实现教材2.4节中程序2.7的多项式类上的各个运算.

Polynonimal继承于单链表,是一个循环单链表,而且是Term的友元。

 

多项式类内的各个主要函数为:

Polynominal:

:

Polynominal(){

theList=newTerm(0,-1);

theList->link=theList;

}

Polynominal:

:

~Polynominal(){

Term*p=theList->link;

while(p!

=theList){

theList->link=p->link;

deletep;

p=theList->link;

}

deletetheList;

}

voidPolynominal:

:

AddTerm(istream&in){

Term*p=theList;

intc,e;

while

(1){

cout<<"pleaseinputthecoefandexp:

"<

cout<<"coef:

";

cin>>c;

cout<<"exp:

";

cin>>e;

if(e<0)break;

p=p->InsertAfter(c,e);

}

}

voidPolynominal:

:

Output(ostream&out)const{

intfirst=1;

Term*p=theList->link;

cout<<"thepolynominalis:

"<

for(;p!

=theList;p=p->link){

if(!

first&&(p->coef>0))out<<"+";//!

first==0表示非第一项

first=0;

out<<*p;//调用重载<<

}

cout<<"\n"<

}

voidPolynominal:

:

PolyAdd(Polynominal&r){//把多项式r加到多项式this上

Term*tp,*istLoc=theList,*rp;

rp=r.theList->link;

tp=istLoc->link;

while(rp->coef>0){

if(tp->coef>rp->coef){

istLoc=tp;

tp=tp->link;

continue;

}

if(tp->coef==rp->coef){

tp->coef=tp->coef+rp->coef;

if(tp->coef==0){

istLoc->link=tp->link;

deletetp;

tp=istLoc->link;

}else{

istLoc=tp;

tp=tp->link;

}

}else{

istLoc=istLoc->InsertAfter(rp->coef,rp->exp);

}

rp=rp->link;

}

}

 

2、在该类上增加成员函数voidPolyMul(Polynominal&r),并重载*运算符.

PolyMul():

注释:

主要的思路为,新建一个多项式对象Temp,将两两相乘的所得的项存入

Temp中值得注意的是,每次q多项式每项扫描完毕后,都需要q指针重新归为到它的起点,然后进入p多项式下一个项的相乘周期,复杂度为O(n^2)级别。

3、实现菜单驱动的main函数,测试多项式类上的各个运算,输入多项式,显示多项式,多项式加法和乘法运算.

Main():

●测试样例

加入多项式、多项式相加、多项式相乘

 

实验报告

如图,分别检测6X^6+3X^5+4X^2与2X^2+3X相加和相乘运算,得到

6X^6+3X^5+4X^2+2X^2+3X+2X^2+3X和12X^8+18X^7+6X^7+9X^6+8X^4+12X^3,

符合预期。

实验报告

四、实验小结(包括总结上机调试过程中所遇到的问题和解决方法、感想与建议等)

1、这是我第一次编写这种规模的c++程序,而且加入了图形化菜单,中间突破了很多困难,让我对于c++语法和应用都上了一个台阶。

2、这个程序中的指针操作很多,很多时候一不小心内存就会泄露和报错,debug的时候需要一步步跟踪去查找,费时费力,但是我耐下了心一步步去调试,对于三种新建对象方法的不同之处也有了很深的认识。

3、有些函数中对于边界的判断和逻辑思维的严谨有较高的要求,很多时候找不出出错在哪儿,便会去询问高手,从高手处学到了很多,对于逻辑思维和严谨性的训练,我要用过更多的算法来锻炼。

4、一步步耐心写下这好几百行的代码,觉得比较满足和欣慰。

五、指导教师评语

成绩

批阅人

日期

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1