顺序线性列表的增删查改
来源:互联网 发布:云南师范大学网络教学 编辑:程序博客网 时间:2024/06/06 05:00
顺序线性列表,说白了就是对一个数组元素进行增删查改,下面是自己的一些理解。
增加:分为三种情况,1)是增加的位置在数组的后面,且数组未装满的情况,直接加到后面。2)数组未满,需要插入数据到中间,那么从插入位置开始的元素开始后移,然后插入元素,数组长度加1。3)数值元素个数已经等于或者大于数组长度,这时数组需要扩容,所谓的扩容就是用一个临时数组来装原来数组的数据,然后重新new一个数组名称相同,长度是原来2倍的数组,然后讲临时数组的内容全部放到数组里面,然后再将元素插入数组中。
删除:分为两种情况,1)是直接在后面删除一个元素,然后数组长度减一。2)删除元素位置后面还有很多元素,那么久从删除位置开始依次将后面的元素先前移动,用来覆盖前面的元素。
查找:直接根据index来查找,当然index要大于0,小于数组的长度。
修改:也是直接根据index来修改,当然index要大于0,小于数组的长度。
下面是具体的代码:
package com.structure.linktable.imp;/** * 线性表接口 * @author fengjr */public interface LinearTable<T> {//判空public boolean isEmpty();//计算长度public int getLength();//返回某个位置的元素public T getData(int index);//更新index位置的元素,返回前一个元素public T setData(int index,T element);//插入一个元素,位置没有限制(插入链表末尾)public boolean addData(T element);//在指定的位置上插入一个元素public boolean addData(int index,T element);//删除某个位置上的元素,并返回该元素public T deleteData(int index);//清空线性表public boolean clearData();}实现类:package com.structure.linktable.impl;import com.structure.linktable.imp.LinearTable;/** * 线性表实现 * @author fengjr * @param <T> */public class SequenceTable<T> implements LinearTable<T> {private T[] se_table;//使用数组作为元素private int se_length;//数组长度//通过构造函数序列号顺序表@SuppressWarnings("unchecked")public SequenceTable(int size){if(size<0){System.out.println("不能为空");}else{this.se_table=(T[]) new Object[size];this.se_length=0;}}//初始化数组public SequenceTable(){this(20);}@Overridepublic boolean isEmpty() {if(this.se_length==0){return true;}else{return false;}}@Overridepublic int getLength() {return this.se_length;}//索引值应该从0开始,小于最大长度@Overridepublic T getData(int index) {if(index>=0&&index<this.se_length){return se_table[index];}else{return null;}}@Overridepublic T setData(int index, T element) {if(index>=0&&index<this.se_length&&se_table[index]!=null){T oldElement=se_table[index];se_table[index]=element;return oldElement;}return null;}@Overridepublic boolean addData(T element) {//加到末尾return addData(this.se_length,element);}@Overridepublic boolean addData(int index, T element) {//如果element为空if(element==null){return false;}//首先如果index等于或者大于数组长度,则需要扩容if(this.se_length==se_table.length){T[] tem=se_table;this.se_table=(T[]) new Object[this.se_length*2];for(int i=0;i<=tem.length;i++){se_table[i]=tem[i];}}//如果index等于0,默认插入到第一个位置if(index<=0){index=0;}//如果index小于数组长度,则index后面的内容需要后移if(index>this.se_length){this.se_length=index;}for(int j=this.se_length-1;j>=index;j--){se_table[j+1]=se_table[j];}this.se_table[index]=element;this.se_length++;return true;}@Overridepublic T deleteData(int index) {if(index>0&&index<this.se_length&&this.se_length!=0){T oldElement=se_table[index];for(int j=index;j<this.se_length;j++){se_table[index]=se_table[index+1];}this.se_table[this.se_length-1]=null;this.se_length--;return oldElement;}return null;}@Overridepublic boolean clearData() {if(this.se_length!=0){for(Object obj:this.se_table){obj=null;}return true;}return false;}}测试类:package com.structure.linktable.test;import com.structure.linktable.impl.SequenceTable;public class Test {/** * @param args */public static void main(String[] args) {SequenceTable sequenceTable = new SequenceTable(10); sequenceTable.addData("a"); sequenceTable.addData("b"); sequenceTable.addData("c"); System.out.println(sequenceTable.getLength()); System.out.println(sequenceTable.toString()); System.out.println(sequenceTable.getData(0)); System.out.println(sequenceTable.getData(1)); System.out.println(sequenceTable.getData(2)); sequenceTable.setData(0, "aa"); System.out.println(sequenceTable.getData(0));}}测试结果:
3
com.structure.linktable.impl.SequenceTable@14318bb
a
b
c
aa
0 0
- 顺序线性列表的增删查改
- 数据结构线性表的动态顺序实现增删改查
- 线性表顺序结构增删改查
- 增删改查的列表
- 线性表的“增删改查”
- 线性表的完善增删改查
- 【数据结构】顺序表的增删改查
- 顺序表的增删改查
- 顺序表的增删改查实现
- 顺序表的增删改查操作
- 顺序表的增删改查
- 数据结构顺序表的增删查改
- asp_异步列表的增删查改
- angularJs用户列表的增删改查
- Python中列表的增删改查
- js增删改查列表
- 【数据结构】动态顺序栈的增删改查
- 顺序表的实现及增删查改
- 字符编码的奥秘
- Android设备信息获取
- js-重置FORM表单--通用
- 各类导航网址源码
- 批处理程序总结(后期逐步补充)
- 顺序线性列表的增删查改
- Java数组——复制数组copyof()
- boost 1.55在GCC 4.8.2 下的BUG
- js 动画封装
- scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class
- storm理解
- mutating method sent to immutable object
- java.lang.NoSuchMethodError: android.widget.Button.setBackground
- UML_用例图