南邮数据结构实验一Word格式文档下载.docx

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

南邮数据结构实验一Word格式文档下载.docx

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

南邮数据结构实验一Word格式文档下载.docx

吴爱天

班级学号

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<

typenameT>

voidSeqList<

T>

:

Reverse(){

T*elementsTemp;

elementsTemp=newT[n];

intnCopy=n;

intj=0;

while(nCopy>

0){

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

nCopy--;

j++;

}

for(inti=0;

i<

n;

i++){

elements[i]=elementsTemp[i];

}

注释:

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

2、在顺序表类SeqList中增加成员函数boolDeleteX(constT&

●删除所有值为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(){

Term*p=theList->

link;

while(p!

=theList){

theList->

link=p->

deletep;

p=theList->

deletetheList;

voidPolynominal:

AddTerm(istream&

in){

Term*p=theList;

intc,e;

while

(1){

cout<

<

"

pleaseinputthecoefandexp:

endl;

coef:

;

cin>

>

c;

exp:

e;

if(e<

0)break;

p=p->

InsertAfter(c,e);

Output(ostream&

out)const{

intfirst=1;

thepolynominalis:

for(;

p!

=theList;

p=p->

link){

if(!

first&

&

(p->

coef>

0))out<

+"

//!

first==0表示非第一项

first=0;

out<

*p;

//调用重载<

\n"

PolyAdd(Polynominal&

r){//把多项式r加到多项式this上

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

rp=r.theList->

tp=istLoc->

while(rp->

if(tp->

coef>

rp->

coef){

istLoc=tp;

tp=tp->

continue;

coef==rp->

tp->

coef=tp->

coef+rp->

coef;

coef==0){

istLoc->

link=tp->

deletetp;

}else{

istLoc=istLoc->

InsertAfter(rp->

coef,rp->

exp);

rp=rp->

2、在该类上增加成员函数voidPolyMul(Polynominal&

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