设计算法计算两个多项式的和要求利用线性表.docx

上传人:b****8 文档编号:9449917 上传时间:2023-02-04 格式:DOCX 页数:16 大小:36.29KB
下载 相关 举报
设计算法计算两个多项式的和要求利用线性表.docx_第1页
第1页 / 共16页
设计算法计算两个多项式的和要求利用线性表.docx_第2页
第2页 / 共16页
设计算法计算两个多项式的和要求利用线性表.docx_第3页
第3页 / 共16页
设计算法计算两个多项式的和要求利用线性表.docx_第4页
第4页 / 共16页
设计算法计算两个多项式的和要求利用线性表.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

设计算法计算两个多项式的和要求利用线性表.docx

《设计算法计算两个多项式的和要求利用线性表.docx》由会员分享,可在线阅读,更多相关《设计算法计算两个多项式的和要求利用线性表.docx(16页珍藏版)》请在冰豆网上搜索。

设计算法计算两个多项式的和要求利用线性表.docx

设计算法计算两个多项式的和要求利用线性表

第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(ListADTlist1,ListADTlist2,ListADTlist3){

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()

{returncurrent

publicObjectnext()

{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;i

newData[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;j

count--;

returntmp;

}

publicTremove(intgivenPosition)

{

if(givenPosition>=count)returnnull;

Ttmp=data[givenPosition];

for(intj=givenPosition;j

count--;

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;i

returnstr;

}

publicStringtoStringV()

{Stringstr="";

for(inti=0;i

returnstr;

}

}

--------------------------------------------------------------------------

publicclassArrayEListIteratorimplementsEListIterater{

privateObject[]data;

privateintcount;

privateintcurrent;

publicArrayEListIterator(Object[]object,intsize)

{data=object;

count=size;

current=0;

}

publicbooleanhasNext()

{returncurrent

publicObjectnext()

{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};

AListlist1=newAList();

AListlist2=newAList();

AListlist3=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(ListADTlist1,ListADTlist2,ListADTlist3){

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);

}

}

}

}

 

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

当前位置:首页 > 总结汇报 > 学习总结

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

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