数据结构线性表的实现与应用完整版.docx

上传人:b****5 文档编号:6369210 上传时间:2023-01-05 格式:DOCX 页数:18 大小:139.81KB
下载 相关 举报
数据结构线性表的实现与应用完整版.docx_第1页
第1页 / 共18页
数据结构线性表的实现与应用完整版.docx_第2页
第2页 / 共18页
数据结构线性表的实现与应用完整版.docx_第3页
第3页 / 共18页
数据结构线性表的实现与应用完整版.docx_第4页
第4页 / 共18页
数据结构线性表的实现与应用完整版.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构线性表的实现与应用完整版.docx

《数据结构线性表的实现与应用完整版.docx》由会员分享,可在线阅读,更多相关《数据结构线性表的实现与应用完整版.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构线性表的实现与应用完整版.docx

数据结构线性表的实现与应用完整版

实验报告

 

课程名称数据结构

实验项目线性表的实现及应用

实验仪器PC机一台

 

学院_____

专业

班级/学号

姓名

实验日期

成绩

指导教师

北京信息科技大学

信息管理学院

(数据结构课程上机)实验报告

专业:

班级:

学号:

姓名:

成绩:

实验名称

线性表的实现及应用

实验地点

实验时间

1.实验目的:

(1)理解用顺序表实现线性表的特点;熟练掌握顺序表的基本操作;学会利用顺序表解决实际应用问题。

(2)熟练掌握单链表的使用;理解用链表实现线性表的特点;了解链表的多种形式;学会利用单链表解决实际应用问题。

2.实验要求:

(1)学时为8学时;

(2)能在机器上正确、调试运行程序;

(3)本实验需提交实验报告;

(4)实验报告文件命名方法:

数据结构实验_信管16xx_学号_姓名.doc。

3.实验内容和步骤:

第一部分顺序表的实现与应用

(1)基于顺序表实现线性表的以下基本操作:

publicinterfaceLList

{.n分别表示)围坐在一张圆桌周围。

从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

要求:

输出出列次序。

第二部分单链表的实现与应用

(4)基于单链表实现线性表的以下基本操作(不需要建立接口,直接建立带头结点的单链表类):

ADTList

{booleanisEmpty();

ndexOf("+key+"),");

for(inti=0;i<;i++)

{

if[i]))etName()+"(";oString();oString();

(1)

packageex1;

publicclassJosephus{

publicJosephus(intn,intk,intm)

{

"Josephus("+n+","+k+","+m+"),");

SeqListlist=newSeqList(n);

oString()+",");oString());

oString()+",");oString());

etName()+"(";//返回类名

for(Nodep=p!

=null;p=//p遍历单链表

{str+=if!

=null)

str+=",";//不是最后一个结点时,加分隔符

}

returnstr+")";

}

}

(5)、

packageex2;

publicclassSortedSinglyList>extendsSinglyList{

//构造空排序单链表

publicSortedSinglyList()

{

super();//默认调用父类构造方法SinglyList()

}

publicSortedSinglyList(SinglyListlist)

{

super();//构造空单链表

for(Nodep=p!

=null;p=//直接插入排序,每趟插入1个元素

;//排序单链表按值插入

}

//构造,将values数组中的所有对象按值插入

publicSortedSinglyList(Tvalues[])

{

super();

for(inti=0;i<;i++)

(values[i]);

}

publicvoidset(inti,Tx)//设置第i个元素值为x

{

thrownewUnsupportedOperationException("set(inti,Tx)");//不支持父类方法,覆盖并抛出异常

}

publicNodeinsert(inti,Tx)//插入x作为第i个元素

{

thrownewUnsupportedOperationException("set(inti,Tx)");//不支持父类方法,覆盖并抛出异常

}

publicNodeinsert(Tx)//在线性表最后插入x元素

{

Nodep=;

for(;!

=null&&p=;

=newNode(x,;

return;

}

publicNodesearch(Tkey)//查找,返回首次出现的关键字为key元素

{

for(Nodep=;!

=null&&<=0;p=

ifreturnp;

returnnull;

}

}

(6)、

e、

packageex2;

publicclassDel1{

publicDel1(inti,intk){

Integer[]values={1,5,6,10,13};

SinglyListlist=newSinglyList(values);

());

for(intj=0;j

(i);

"删除后:

"+());

}

publicstaticvoidmain(String[]args){

newDel1(2,2);

}

}

f、

packageex2;

publicclassDel2{

publicDel2(intmink,intmaxk)

{

Integer[]values={1,3,9,17,34};

SortedSinglyListlist=newSortedSinglyList(values);

Nodep=;

intj=0;

while!

=null&&{

p=;

j++;

}

while!

=null&&{

(j);

}

"list="+());

}

publicstaticvoidmain(Stringargs[])

{newDel2(2,18);}

}

g、

packageex2;

publicclassMeger{

publicMeger()

{

Integer[]values1={1,2,5,7,9};

SortedSinglyListval1=newSortedSinglyList(values1);

Integer[]values2={1,0,5,8,9};

SortedSinglyListval2=newSortedSinglyList(values2);

SortedSinglyListval=newSortedSinglyList();

inti=0;intj=0;

while(i<()&&j<())

{

if(i)<=(j))

{(i));

if(i)==(j))

j++;

i++;

}

else

{(j));

j++;

}

}

while(i<())

{

(i));

i++;

}

while(j<())

{

(j));

j++;

}

}

publicstaticvoidmain(Stringargs[])

{

newMeger();

}

}

(7)、

packagePoly;

publicinterfaceSubible//可相加接口,T表示数据元素的数据类型

{

publicvoidsub(Tt);//+=加法,约定两元素相加规则

publicbooleanremovable();//约定删除元素条件

}

packagePoly;

//项类,一元多项式的一项,实现可比较接口和可相加接口

publicclassTermXimplementsComparable,Subible

{

protectedintcoef,xexp;//系数,x指数(可为正、0)

publicTermX(intcoef,intxexp)//构造一项

{

=coef;

=xexp;

}

publicTermX(TermXterm)//拷贝构造方法

{

this,;

}

//以“系数x^指数”的省略形式构造一元多项式的一项。

//省略形式说明:

当系数为1或-1且指数>0时,省略1,-1只写负号“-”,如x^2、-x^3;

//当指数为0时,省略x^0,只写系数;当指数为1时,省略^1,只写x。

publicTermX(Stringtermstr)

{

if(0)=='+')//去掉+号

termstr=

(1);

inti=('x');

if(i==-1)//没有x,即指数为0

{

=(termstr);//获得系数

=0;

}

else//有x,x之前为系数,x^之后为指数

{

if(i==0)//以x开头,即系数为1

=1;

else

{

Stringsub=(0,i);//x之前子串表示系数

if("-"))//系数只有-号,即系数为-1

=-1;

else

=(sub);//获得系数

}

i=('^');

if(i==-1)

=1;//没有^,即指数为1

else

=(i+1));//获得指数

}

}

//返回一元多项式的一项对应的“系数x^指数”的省略形式字符串,省略形式说明同TermX(String)构造方法。

publicStringtoString()

{

Stringstr=>0"+":

"-";//系数的符号位

if==0||>0&&!

=1&&!

=-1)

str+=;//系数绝对值,省略系数1

if>0)

str+="x";//指数为0时,省略x^0,只写系数

if>1)

str+="^"+;//指数为1时,省略^1,只写x

returnstr;

}

publicintcompareTo(TermXterm)//按x指数比较两项大小,实现Comparable接口

{

if==//比较相等

return0;//比较规则与equals(Object)不同

return<-1:

1;//比较大小,仅比较指数

}

publicvoidsub(TermXterm)//若指数相同,则系数相减;实现Subible接口

{

if(term)==0)

-=;

else

thrownewIllegalArgumentException("两项的指数不同,不能相减。

");

}

publicbooleanremovable()//若系数为0,则删除元素;实现Subible接口

{

return==0;//不存储系数为0的项

}

//比较两项是否相等,比较系数和指数,比较规则与compareTo(term)==0不同

publicbooleanequals(Objectobj)

{

if(this==obj)

returntrue;

if(!

(objinstanceofTermX))

returnfalse;

TermXterm=(TermX)obj;

return==&&==;

}

}

 

packagePoly;

import;

import;

publicclassPolySinglyList&Subible>

extendsSortedSinglyList

{

publicPolySinglyList()//构造方法

{

super();//创建空单链表

}

publicPolySinglyList(Tterms[])//构造方法,由项数组指定多项式各项值

{

super(terms);

}

publicPolySinglyList(PolySinglyListlist)//拷贝构造方法

{

super();//单链表深拷贝,复制所有结点,没有复制对象

}

publicvoidsubAll(PolySinglyListlist)//多项式相减,this-=list功能,不改变list

{

Nodefront=,p=;

Nodeq=(p!

=null&&q!

=null)

if//两项大小相同

{

//两项相加,add()方法由Subible接口约定

if//相加后元素满足删除条件

{//removable()方法由Subible接口约定

=;//相加后元素不需要存储,删除p结点

p=;

}

else

{

front=p;//front是p的前驱结点

p=;

}

q=;

}

elseif{

front=p;

p=;

}

else

{

=newNode,p);//复制q结点并插入到front结点之后

q=;

}

while(q!

=null)//将list单链表中剩余结点复制并插入到当前链表尾

{

=newNode,null);

front=;

q=;

}

}

}

 

packagePoly;

import;

publicclassPolynomial

{

privatePolySinglyListlist;//多项式排序单链表,TermX表示一元多项式的一项

publicPolynomial()//构造方法

{

=newPolySinglyList();//创建空单链表,执行排序单链表默认构造方法

}

publicPolynomial(TermXterms[])//构造方法,由项数组指定多项式各项值

{

=newPolySinglyList(terms);

}

publicPolynomial(Stringpolystr)//构造方法,参数指定多项式表达式字符串

{

this();

if(polystr==null||()==0)

return;

Noderear=intstart=0,end=0;//序号start~end的子串为一项

while(start<()&&end<())

{

inti=('+',end+1);//返回字符+在字符串中从end+1开始的序号

if(i==-1)//未找到指定字符

i=();

intj=('-',end+1);

if(j==-1)

j=();

end=i

j;//end为下一个+或-号的序号

=newNode(newTermX(start,end)),null);

//尾插入,以序号start~end的子串作为一项,创建结点,创建元素对象

rear=;

start=end;

}

}

publicPolynomial(Polynomialpoly)//深度拷贝构造方法,复制所有结点和对象

{

this();//创建空单链表,只有头结点

Noderear=for(Nodep=p!

=null;p=//p遍历poly单链表

{

=newNode(newTermX,null);//复制结点,复制对象

rear=;

}

}

publicStringtoString()//返回多项式的描述字符串

{

Stringstr="";

for(Nodep=p!

=null;p=

str+=returnstr;

}

publicvoidsubAll(Polynomialpoly)//多项式相加,this+=poly

{

}

publicPolynomialunion(Polynomialpoly)//减法-,C=this-poly

{

Polynomialpolyc=newPolynomial(this);//深度拷贝,复制所有结点和对象

(poly);//cpoly-=poly

returnpolyc;//返回对象引用

}

publicbooleanequals(Objectobj)//比较两个多项式是否相等

{

returnthis==obj||objinstanceofPolynomial&&

//比较两条单链表是否相等

}

}

 

packagePoly;

publicclassPolynomial_ex

{

publicstaticvoidmain(Stringargs[])

{

"//一元多项式");

TermXaterms[]={newTermX(-7,9),newTermX(2,7),newTermX(-9,4),newTermX(1,2),

newTermX(-1,1)};//图(x),不要求数组排序

Polynomialapoly=newPolynomial(aterms);

Polynomialbpoly=newPolynomial("-1+x-x^2+10x^4-3x^8+5x^10");//图(x)

Polynomialcpoly=(bpoly);

"A="+()+"\n\nB="+()+"\n");

"C=A-B,C="+());

}

}

 

4.实验总结:

(本次实验的收获、未解决的问题以及体会和建议等)

 

说明:

1.实验名称、实验目的、实验内容、实验要求由教师确定,实验前由教师事先填好,然后作为实验报告模版供学生使用;

2.实验准备由学生在实验或上机之前填写,教师应该在实验前检查;

3.实验过程由学生记录实验的过程,包括操作过程、遇到哪些问题以及如何解决等;

4.实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等;

5.源程序、代码、具体语句等,若表格空间不足时可作为附录另外附页。

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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