(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=ij;//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.源程序、代码、具体语句等,若表格空间不足时可作为附录另外附页。