设计算法计算两个多项式的和要求利用线性表.docx
《设计算法计算两个多项式的和要求利用线性表.docx》由会员分享,可在线阅读,更多相关《设计算法计算两个多项式的和要求利用线性表.docx(16页珍藏版)》请在冰豆网上搜索。
![设计算法计算两个多项式的和要求利用线性表.docx](https://file1.bdocx.com/fileroot1/2023-2/4/92686a6f-1e41-4a77-9e03-5de3bf728826/92686a6f-1e41-4a77-9e03-5de3bf7288261.gif)
设计算法计算两个多项式的和要求利用线性表
第5次作业
。
作业
在LinkedList中添加一个方法reverse,将链表倒置,要求算法的复杂性为O(size())
publicstaticvoidreverse(LListpreList)
{
Nodep=preList.head,succ=null,front=null;
while(p!
=null)
{
succ=p.getNext();
p.setNext(front);
front=p;
p=succ;
}
preList.head=front;
}
实验
1.实验目的
熟悉线性表数组、链表的实现,熟悉用递归及循环方法解决问题。
2.实验要求
设计算法计算两个多项式的和,要求利用线性表。
3.算法设计
publicstaticvoidaddTwoPolynomial(ListADT- list1,ListADT
- list2,ListADT
- list3){
ArrayEListIteratoriterator1=(ArrayEListIterator)list1.iterator();
ArrayEListIteratoriterator2=(ArrayEListIterator)list2.iterator();
list3.clear();
Itema,b;
while(iterator1.hasNext()&&iterator2.hasNext())
{
a=(Item)iterator1.getCurrent();
b=(Item)iterator2.getCurrent();
if(a.getExpn(){
list3.add(a);iterator1.advance();
}
elseif(a.getExpn()==b.getExpn())
{
doublec=a.getCoef()+b.getCoef();
if(c!
=0)
list3.add(newItem(c,a.getExpn()));
iterator1.advance();iterator2.advance();
}
else
{
list3.add(b);iterator2.advance();
}
while(iterator1.hasNext())
{
a=(Item)iterator1.next();
list3.add(a);
}
while(iterator2.hasNext())
{
b=(Item)iterator2.next();
list3.add(b);
}
}
4.软件结构
<>
ListADT
addTwoPolynomial
main
interator
5.程序清单
publicinterfaceListADT{
publicbooleanadd(Tobject);
publicbooleanadd(intgivenPosition,Tobject);
publicTremove(intgivenPosition);
publicTremove(Tobject);
publicvoidclear();
publicbooleanreplace(intgivenPosition,Tobject);
publicTgetEntry(intgivenPosition);
publicintsize();
publicbooleanisEmpty();
publicbooleancontains(Tobject);
publicStringtoString();
publicIteratoriterator();
}
---------------------------------------------------------------
publicinterfaceIterator{
//一个数据集合
//一个用于指向当前元素的指针
publicbooleanhasNext();
publicObjectnext();
publicvoidadd(Objectobject);
publicvoidremove();
}
---------------------------------------------------------------
publicclassArrayIteratorimplementsIterator{
privateObject[]data;
privateintcount;
privateintcurrent;
publicArrayIterator(Object[]object,intsize)
{data=object;count=size;current=0;}
publicbooleanhasNext()
{returncurrentpublicObjectnext()
{if(!
hasNext())returnnull;
current++;
returndata[current-1];
}
publicvoidadd(Objectobject)
{thrownewUnsupportedOperationException();}
publicvoidremove()
{thrownewUnsupportedOperationException();}
}
---------------------------------------------------------------
publicclassAListimplementsListADT
{
privateT[]data;
privatefinalintDEFAULT_CAPACITY=8;
privateintcount;
publicAList()//不带参数的构造函数
{data=(T[])newObject[DEFAULT_CAPACITY];count=0;}
publicAList(intinitialCapacity)//带参数的构造函数
{data=(T[])newObject[initialCapacity];count=0;}
publicIteratoriterator(){returnnewArrayIterator(data,count);}
privatevoidexpandCapacity()
{T[]newData=(T[])newObject[data.length*2+1];
for(inti=0;inewData[i]=data[i];
data=newData;
}
publicbooleanadd(Tobject)
{//检查数组是否已满。
如果已满,扩展数组的容量
if(size()==data.length)expandCapacity();
data[count]=object;
count++;
returntrue;
}
publicbooleanadd(intgivenPosition,Tobject)
{
if(givenPosition>=count||givenPosition<0)returnfalse;
for(intj=count;j>givenPosition;j++)data[j]=data[j-1];
data[givenPosition]=object;
count++;
returntrue;
}
publicTremove(Tobject)
{
inti;
for(i=0;i<=count&&!
data[i].equals(object);i++);//查找要删除的元素
if(i==count)returnnull;//防止删除不存在的元素
Ttmp=data[i];
for(intj=i;jcount--;
returntmp;
}
publicTremove(intgivenPosition)
{
if(givenPosition>=count)returnnull;
Ttmp=data[givenPosition];
for(intj=givenPosition;jcount--;
returntmp;
}
publicvoidclear(){count=0;}
publicbooleanreplace(intgivenPosition,Tobject)
{
if(givenPosition>=count||givenPosition<0)returnfalse;
data[givenPosition]=object;
returntrue;
}
publicTgetEntry(intgivenPosition)
{if(givenPosition>=count||givenPosition<0)returnnull;
returndata[givenPosition];
}
publicintsize(){returncount;}
publicbooleanisEmpty(){returncount==0;}
publicbooleancontains(Tobject)
{
inti;
for(i=0;i<=count&&!
data[i].equals(object);i++);
returni!
=count;
}
publicStringtoString()
{Stringstr="";
for(inti=0;ireturnstr;
}
publicStringtoStringV()
{Stringstr="";
for(inti=0;ireturnstr;
}
}
--------------------------------------------------------------------------
publicclassArrayEListIteratorimplementsEListIterater{
privateObject[]data;
privateintcount;
privateintcurrent;
publicArrayEListIterator(Object[]object,intsize)
{data=object;
count=size;
current=0;
}
publicbooleanhasNext()
{returncurrentpublicObjectnext()
{if(!
hasNext())returnnull;
current++;
returndata[current-1];
}
publicvoidadd(Objectobject)
{thrownewUnsupportedOperationException();
}
publicvoidremove()
{thrownewUnsupportedOperationException();
}
publicvoidadvance()
{if(hasNext())current++;
}
publicvoidbackward()
{if(hasPrevios())current--;
}
publicbooleanhasPrevios()
{returncurrent>=0;
}
publicObjectgetCurrent()
{returndata[current];
}
publicvoidsetStrat()
{current=0;
}
publicvoidsetEnd()
{current=count-1;
}
publicvoidsetPos(intpos)
{current=pos;
}
@Override
publicObjectprevios(){
//TODOAuto-generatedmethodstub
returnnull;
}
@Override
publicintnextIndex(){
//TODOAuto-generatedmethodstub
return0;
}
@Override
publicintpreviosIndex(){
//TODOAuto-generatedmethodstub
return0;
}
@Override
publicvoidset(Objectobject){
//TODOAuto-generatedmethodstub
}
@Override
publicbooleanisInList(){
//TODOAuto-generatedmethodstub
returnfalse;
}
@Override
publicbooleansetStart(){
//TODOAuto-generatedmethodstub
returnfalse;
}
}
--------------------------------------------------------------------------
publicclassItem{
privatedoublecoef;
privateintexpn;
publicItem(doublecoef,intexpn)
{this.coef=coef;
this.expn=expn;}
publicdoublegetCoef(){returncoef;}
publicintgetExpn(){returnexpn;}
}
--------------------------------------------------------------------------
importjava.util.Scanner;
publicclassTest{
publicstaticvoidmain(String[]args){
inta1[]={1,2,3};
inta2[]={1,2,3};
intb1[]={4,5,6};
intb2[]={4,5,6};
AList- list1=newAList
- ();
AList- list2=newAList
- ();
AList- list3=newAList
- ();
for(inti=0;i{list1.add(newItem(a1[i],a2[i]));
list2.add(newItem(b1[i],b2[i]));
}
addTwoPolynomial(list1,list2,list3);
System.out.println("additionis:
"+list3.toString());
}
publicstaticvoidaddTwoPolynomial(ListADT- list1,ListADT
- list2,ListADT
- list3){
ArrayEListIteratoriterator1=(ArrayEListIterator)list1.iterator();
ArrayEListIteratoriterator2=(ArrayEListIterator)list2.iterator();
list3.clear();
Itema,b;
while(iterator1.hasNext()&&iterator2.hasNext())
{
a=(Item)iterator1.getCurrent();
b=(Item)iterator2.getCurrent();
if(a.getExpn(){
list3.add(a);iterator1.advance();
}
elseif(a.getExpn()==b.getExpn())
{
doublec=a.getCoef()+b.getCoef();
if(c!
=0)
list3.add(newItem(c,a.getExpn()));
iterator1.advance();iterator2.advance();
}
else
{
list3.add(b);iterator2.advance();
}
while(iterator1.hasNext())
{
a=(Item)iterator1.next();
list3.add(a);
}
while(iterator2.hasNext())
{
b=(Item)iterator2.next();
list3.add(b);
}
}
}
}