java顺序表及其各种操作

顺序表: 线性表的顺序表是,指的是用一组地址连续的存储单元一次存储线性表的数据元素。以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。只要确定了存储线性表的起始位置,线性表中任何一数据元素都可以随机存取,所以线性表的存储结构是一种随机存取的存储结构。
由于高级程序设计语言中的数组类型也具有随机存取的特性,因此,通常都用数组来描述数据结构中的顺序存储结构。
优点——随机存储,读取数据的速度快
缺点——顺序存储,当需要增加、删除数据慢

顺序表的实现以及各种操作

class test{//
    int usedsize;//顺序表中有多少个有效元素
    int []elem;//用来保存此线性表数据的数组 

    public test(){//设置默认数组长度为10
        this(10);
    }
    public test(int i) {//有参数的构造函数,i代表的是数组长度。
        elem = new int [i];

        // TODO Auto-generated constructor stub
    }

    //判断顺序表是否是满的
    public boolean isFull()
    {
        if(this.usedsize == elem.length)//如果顺序表中有效元素的个数与数组长度相同,则说明顺序表是满的
            return true;
        else{
        return false;}
    }
    //顺序表中插入一个元素

     public boolean insert(int pos,int val)
        {   
            if(pos>this.usedsize||pos<-1)//判断pos是否合法
            {  return false;}

            if(isFull()==true) //如果数组满了就进行扩容
            {int []a=new int [2*elem.length];//创建一个新的数组时原来数组长度的二倍
            System.arraycopy(elem, 0, a, 0, elem.length);//把原来的数组复制到新的数组里面
            elem=a;//把新数组赋值给elem

            } 

            for (int i = this.usedsize-1; i >=pos; i--) {   
                elem[i+1] = elem[i];
            }
            elem[pos] = val;                
            this.usedsize++;  
            return true;
        }


    //打印顺序表
    public void show(int []elem){
        for (int i = 0; i < this.usedsize; i++) {
            System.out.println(elem[i]+" ");
        }

    }
    //在顺序表中查找元素,并返回该元素的下标
    public int select(int val)
    {
        for(int i=0;i<this.usedsize;i++){
        if (elem[i]==val){

            return i;
        }
    }return -1;

    }
    //判断顺序表是否是空的
    public boolean isempty(){//如果顺序表中有效元素的个数为0,则说明顺序表是空的
        if(this.usedsize==0){
            return true;
        }return false;
    }
    //顺序表删除一个元素
    public void delete(int val){
        int pos= select(val);//先查找下标 

         for (int i = pos; i < this.usedsize-1; i++) {           
          elem[i] = elem[i+1];//让pos以及pos之后的元素都往前挪动,

        }
        this.usedsize--;

    }

}
public class test6 {

    public static void main(String[] args) {
        test t1 =new test();
        for(int i=0;i<10;i++){
            t1.insert(i,i);
        }
    System.out.println("====原数组====");
    t1.show(t1.elem);
    System.out.println("====在0号位置插入999====");
    t1.insert(0, 999);
    t1.show(t1.elem);
    System.out.println("====删除0之后====");
    t1.delete(0);
    t1.show(t1.elem);
    System.out.println("2的下表为"+t1.select(2));
    }}

输出结果:
====原数组====
0
1
2
3
4
5
6
7
8
9
====在0号位置插入999====
999
0
1
2
3
4
5
6
7
8
9
====删除0之后====
999
1
2
3
4
5
6
7
8
9

2的下表为2

猜你喜欢

转载自blog.csdn.net/qq_37232304/article/details/80186683