设计算法计算两个多项式的和要求利用线性表.docx
- 文档编号:9449917
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:36.29KB
设计算法计算两个多项式的和要求利用线性表.docx
《设计算法计算两个多项式的和要求利用线性表.docx》由会员分享,可在线阅读,更多相关《设计算法计算两个多项式的和要求利用线性表.docx(16页珍藏版)》请在冰豆网上搜索。
设计算法计算两个多项式的和要求利用线性表
第5次作业
。
作业
在LinkedList中添加一个方法reverse,将链表倒置,要求算法的复杂性为O(size())
publicstatic
{
Node
while(p!
=null)
{
succ=p.getNext();
p.setNext(front);
front=p;
p=succ;
}
preList.head=front;
}
实验
1.实验目的
熟悉线性表数组、链表的实现,熟悉用递归及循环方法解决问题。
2.实验要求
设计算法计算两个多项式的和,要求利用线性表。
3.算法设计
publicstaticvoidaddTwoPolynomial(ListADT
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();} } --------------------------------------------------------------- publicclassAList { 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}; AList AList AList 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 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); } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 算法 计算 两个 多项式 要求 利用 线性
![提示](https://static.bdocx.com/images/bang_tan.gif)