数据结构线性表的实现与应用完整版.docx
- 文档编号:6369210
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:18
- 大小:139.81KB
数据结构线性表的实现与应用完整版.docx
《数据结构线性表的实现与应用完整版.docx》由会员分享,可在线阅读,更多相关《数据结构线性表的实现与应用完整版.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构线性表的实现与应用完整版
实验报告
课程名称数据结构
实验项目线性表的实现及应用
实验仪器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+"),");
SeqList
oString()+",");oString());
oString()+",");oString());
etName()+"(";//返回类名
for(Node
=null;p=//p遍历单链表
{str+=if!
=null)
str+=",";//不是最后一个结点时,加分隔符
}
returnstr+")";
}
}
(5)、
packageex2;
publicclassSortedSinglyList
//构造空排序单链表
publicSortedSinglyList()
{
super();//默认调用父类构造方法SinglyList()
}
publicSortedSinglyList(SinglyList
{
super();//构造空单链表
for(Node
=null;p=//直接插入排序,每趟插入1个元素
;//排序单链表按值插入
}
//构造,将values数组中的所有对象按值插入
publicSortedSinglyList(Tvalues[])
{
super();
for(inti=0;i<;i++)
(values[i]);
}
publicvoidset(inti,Tx)//设置第i个元素值为x
{
thrownewUnsupportedOperationException("set(inti,Tx)");//不支持父类方法,覆盖并抛出异常
}
publicNode
{
thrownewUnsupportedOperationException("set(inti,Tx)");//不支持父类方法,覆盖并抛出异常
}
publicNode
{
Node
for(;!
=null&&p=;
=newNode
return;
}
publicNode
{
for(Node
=null&&<=0;p=
ifreturnp;
returnnull;
}
}
(6)、
e、
packageex2;
publicclassDel1{
publicDel1(inti,intk){
Integer[]values={1,5,6,10,13};
SinglyList
());
for(intj=0;j (i); "删除后: "+()); } publicstaticvoidmain(String[]args){ newDel1(2,2); } } f、 packageex2; publicclassDel2{ publicDel2(intmink,intmaxk) { Integer[]values={1,3,9,17,34}; SortedSinglyList Node 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}; SortedSinglyList Integer[]values2={1,0,5,8,9}; SortedSinglyList SortedSinglyList 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 { publicvoidsub(Tt);//+=加法,约定两元素相加规则 publicbooleanremovable();//约定删除元素条件 } packagePoly; //项类,一元多项式的一项,实现可比较接口和可相加接口 publicclassTermXimplementsComparable { 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 extendsSortedSinglyList { publicPolySinglyList()//构造方法 { super();//创建空单链表 } publicPolySinglyList(Tterms[])//构造方法,由项数组指定多项式各项值 { super(terms); } publicPolySinglyList(PolySinglyList { super();//单链表深拷贝,复制所有结点,没有复制对象 } publicvoidsubAll(PolySinglyList { Node Node =null&&q! =null) if//两项大小相同 { //两项相加,add()方法由Subible接口约定 if//相加后元素满足删除条件 {//removable()方法由Subible接口约定 =;//相加后元素不需要存储,删除p结点 p=; } else { front=p;//front是p的前驱结点 p=; } q=; } elseif{ front=p; p=; } else { =newNode q=; } while(q! =null)//将list单链表中剩余结点复制并插入到当前链表尾 { =newNode front=; q=; } } } packagePoly; import; publicclassPolynomial { privatePolySinglyList publicPolynomial()//构造方法 { =newPolySinglyList } publicPolynomial(TermXterms[])//构造方法,由项数组指定多项式各项值 { =newPolySinglyList } publicPolynomial(Stringpolystr)//构造方法,参数指定多项式表达式字符串 { this(); if(polystr==null||()==0) return; Node while(start<()&&end<()) { inti=('+',end+1);//返回字符+在字符串中从end+1开始的序号 if(i==-1)//未找到指定字符 i=(); intj=('-',end+1); if(j==-1) j=(); end=i j;//end为下一个+或-号的序号 =newNode //尾插入,以序号start~end的子串作为一项,创建结点,创建元素对象 rear=; start=end; } } publicPolynomial(Polynomialpoly)//深度拷贝构造方法,复制所有结点和对象 { this();//创建空单链表,只有头结点 Node =null;p=//p遍历poly单链表 { =newNode rear=; } } publicStringtoString()//返回多项式的描述字符串 { Stringstr=""; for(Node =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.源程序、代码、具体语句等,若表格空间不足时可作为附录另外附页。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性 实现 应用 完整版
![提示](https://static.bdocx.com/images/bang_tan.gif)