ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

数据结构(顺序表)

数据结构(顺序表) 目录数据结构类型顺序表是什么如何实现属性操作方法泛型是什么怎么用数据结构类型基础结构数组、链表、队列、栈、图、树复合结构线性表、集合、哈希表、LWZ字典、哈夫曼树顺序表是什么顺序表是用数组实现的线性表数据存储在数组中并配套增、删、查、改等等操作方法。如何实现属性元素个数、元素、数组长度定义一个自己的数组类publicclassMyList{intsize0;intlength0;Object[]objects;}操作方法构造函数初始化数组长度定义一个该长度的Object类数组publicMyList(intlen){//如果长度过小或不合法设置为10if(len2){len10;}lengthlen;objectsnewObject[len];}增加在表尾添加指定元素考虑到数组长度的临界情况定义扩容方法publicvoidgrow(){intnewlenlength(length1);//1.5倍扩容Object[]newObjnewObject[newlen];for(inti0;ilength;i){newObj[i]objects[i];}//替换引用objectsnewObj;lengthnewlen;System.out.println(扩容了,现在的长度为length);}publicvoidadd(Objecte){//如果长度达到临界扩容if(sizelength){grow();}objects[size]e;size;}publicvoidaddAll(MyListElist){intaddSizelist.size;inttotallengthaddSize;intlenlength(length1);//长度不够扩容if(totallength){if(lentotal)lentotal;//1.5倍不够直接扩容到指定长度Object[]newObjnewObject[len];for(inti0;isize;i){newObj[i]objects[i];}objectsnewObj;lengthlen;}//将数组中的元素添加for(inti0;iaddSize;i){objects[size]list.objects[i];}}删除删除元素并前移后置元素publicvoidremove(intindex){//如果个数为0返回if(size0){return;}//下标合法性检查if(index0||indexsize){return;}//对应下标前移后置元素for(intiindex;isize-1;i){objects[i]objects[i1];}objects[size-1]null;size--;}按下标删除publicvoidremoveOE(Objecte){//把元素分为两类要保留的和要删除的-3121123intk0;for(inti0;isize;i){if(objects[i].equals(e)){k1;}else{objects[i-k]objects[i];//原地覆盖元素个数并未减少}}size-k;}按元素删除可能有相同元素publicvoidremoveRange(intfrom,intto){//下标检查if(fromto||isIndexOutBounds(from)||isIndexOutBounds(to)){return;}intrangeto-from;for(intito;isize;i){objects[i-range]objects[i];}size-range;}按范围删除 从toIndex开始遍历到末尾不会越界替换遍历找到对应元素直接用新元素替换publicvoidset(intindex,Objecte){if(index0||indexsize){System.out.println(索引不合法);return;}Objecttempobjects[index];objects[index]e;System.out.println(原索引处 temp 已被替换为 e);}publicvoidset(Objectolde,Objecte){if(size0){return;}for(inti0;isize;i){if(Objects.equals(objects[i],olde)){objects[i]e;}}}查找publicObjectget(intindex){//如果输入下标不合法if(isIndexOutBounds(index)){returnnull;}returnobjects[index];}//按元素查找-返回下标publicintindexOf(Objectobj){//遍历数组如果等于对应元素返回索引for(inti0;isize;i){if(Objects.equals(objects[i],obj)){returni;// 找到第一个立刻返回索引}}return-1;//如果数组中不存在}插入把元素添加到顺序表任意位置同样考虑数组长度进行扩容找到指定下标后移元素publicvoidinsert(intindex,Objecte){if(isIndexOutBounds(index)){return;}if(sizelength){grow();}for(intisize;iindex;i--){objects[i]objects[i-1];}objects[index]e;size;}泛型是什么是一种预设的数据类型泛型名可以自己取怎么用定义类时在类名右边加上尖括号泛型名如 public class MyList E 定义方法时声明传参类型、返回值类型、属性类型、转型类型泛型名参数名如 public void add(E e) {}public E remove(int index) {}带有泛型设定的类型在创建对象时需要指定一个具体的数据类型否则默认为Object。如 MyList Integer listnew MyList(10);泛型名不可用来实例化对象。
返回列表