如何使用Java实现顺序表的操作
导读:本文共2846.5字符,通常情况下阅读需要9分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 具体内容如下静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。接口packagecom.github.sqlist;publicinterfaceISequence{//在pos位置插入valbooleanadd(intpos,Objectdata);//查找关键字key找到返回key的下表,没有返回-1intsearch(Obje... ...
音频解说
目录
(为您整理了一些要点),点击可以直达。具体内容如下
静态顺序表:使用定长数组存储。
动态顺序表:使用动态开辟的数组存储。
接口
packagecom.github.sqlist;publicinterfaceISequence{//在pos位置插入valbooleanadd(intpos,Objectdata);//查找关键字key找到返回key的下表,没有返回-1intsearch(Objectkey);//查找是否包含关键字key是否在顺序表当中(这个和search有点冲突)booleancontains(Objectkey);//得到pos位置的值ObjectgetPos(intpos);//删除第一次出现的关键字keyObjectremove(Objectkey);//得到顺序表的长度intsize();//打印顺序表voiddisplay();//清空顺序表以防内存泄漏voidclear();}
实现接口里的每个方法
packagecom.github.sqlist;importjava.util.Arrays;/**顺序表*/publicclassMySequenceImplimplementsISequence{privateObject[]elem;//有效数据个数privateintusedSize;privatestaticfinalintDEFAULT_SIZE=10;publicSqList(){this.elem=newObject[DEFAULT_SIZE];this.usedSize=0;}/***判断是否为满*@return满了返回true,否则返回false*/privatebooleanisFull(){returnthis.elem.length==this.usedSize;}/***在pos位置插入val*@parampos*要插入的位置*@paramdata*要插入的值*@return*插入成功返回true,否则返回false*/@Overridepublicbooleanadd(intpos,Objectdata){//1.判断pos位置的合法性if(pos<0||pos>this.elem.length){returnfalse;}//2.判断是否满了,如果满了进行扩容if(isFull()){this.elem=Arrays.copyOf(this.elem,2*this.elem.length);}//3.把pos位置以及之后的数全部向后挪一个位置for(inti=this.usedSize-1;i>=pos;i--){this.elem[i+1]=this.elem[i];}//4.在pos位置插入valthis.elem[pos]=data;//5.更新长度this.usedSize++;returntrue;}/***判断是否为空*@return表为空返回true,否则返回false*/privatebooleanisEmpty(){returnthis.usedSize==0;}/***查找关键字key找到返回key的下表,没有返回-1*@paramkey关键字的值*@return查找成功返回true,失败返回false*/@Overridepublicintsearch(Objectkey){//1.判断是否为空if(isEmpty()){return-1;}//2.遍历查找for(inti=0;i<this.elem.length;i++){//注意:判断条件不能写成:this.elem[i]==keyif(this.elem[i].equals(key)){returni;}}return-1;}/***查找是否包含关键字key是否在顺序表当中(这个和search有点冲突)*@paramkey关键字的值*@return查找成功返回true,失败返回false*/@Overridepublicbooleancontains(Objectkey){//1.判断是否为空if(isEmpty()){returnfalse;}//2.遍历查找for(inti=0;i<this.elem.length;i++){//注意:判断条件不能写成:this.elem[i]==keyif(this.elem[i].equals(key)){returntrue;}}returnfalse;}/***得到pos位置的值*@parampos得到的值的位置*@return成功得到pos位置的值返回true,否则返回false*/@OverridepublicObjectgetPos(intpos){//1.判断位置是否合法if(pos<0||pos>=this.elem.length){returnnull;}//2.位置合法returnthis.elem[pos];}/***删除第一次出现的关键字key*@paramkey关键字*@return*/@OverridepublicObjectremove(Objectkey){//1.先查表看有没有这个关键字//index:关键字下标intindex=search(key);//2.若表里没有这个关键字if(index==-1){returnnull;}//3.表里有这个关键字Objectdata=this.elem[index];inti;//删除第一次出现的关键字key,把key后面的数全部向前挪一个位置for(i=index;i<this.usedSize;i++){elem[i]=elem[i+1];}this.usedSize--;this.elem[i+1]=null;returndata;}/***得到顺序表的长度*@return顺序表的长度*/@Overridepublicintsize(){returnthis.usedSize;}/***打印顺序表*/@Overridepublicvoiddisplay(){for(inti=0;i<this.usedSize;i++){System.out.print(this.elem[i]+"");}System.out.println();}/***清空顺序表以防内存泄漏*/@Overridepublicvoidclear(){for(inti=0;i<this.usedSize;i++){this.elem[i]=null;}}}
测试方法的正确性
packagecom.github.sqlist;publicclassTestDemo1{publicstaticvoidmain(String[]args){MySequenceImplmySequence=newMySequenceImpl();for(inti=0;i<10;i++){mySequence.add(i,i);}System.out.println("在最大值10的范围内插入数据:");mySequence.display();System.out.println();for(inti=10;i<20;i++){mySequence.add(i,i);}System.out.println("扩容:");mySequence.display();System.out.println();System.out.println("随机位置插入数据:");mySequence.add(9,"list");mySequence.display();System.out.println();System.out.println("search查找一个数据:"+mySequence.search("list"));System.out.println("contains查找一个数据:"+mySequence.contains("list"));System.out.println();System.out.println("查找某一个位置对应的值:"+mySequence.getPos(9));System.out.println();System.out.println("删除一个数据:"+mySequence.remove(8));mySequence.display();System.out.println();System.out.println("得到顺序表的长度:"+mySequence.size());}}
测试结果:
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:
如何使用Java实现顺序表的操作的详细内容,希望对您有所帮助,信息来源于网络。