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

顺序表和链表是两种常见的数据结构,它们都可以用来实现线性表,但是在实现上有所不同。 1. 顺序表的基本操作: - 初始化:创建一个定长的数组,用来存储数据。 - 插入:在指定位置上插入一个元素,需要将该位置及其后面的元素全部后移,时间复杂度为O(n)。 - 删除:删除指定位置上的元素,需要将该位置后面的元素全部前移,时间复杂度为O(n)。 - 查找:根据元素的值或者下标查找指定元素,时间复杂度为O(n)。 - 修改:修改指定位置上的元素,时间复杂度为O(1)。 2. 链表的基本操作: - 初始化:创建一个头节点,头节点不存储数据,用来标识链表的起始位置。 - 插入:在指定位置上插入一个元素,需要先找到该位置的前一个节点,然后将该节点的next指针指向新节点,新节点的next指针指向该节点后面的节点,时间复杂度为O(n)。 - 删除:删除指定位置上的元素,需要先找到该位置的前一个节点,然后将该节点的next指针指向该节点后面的节点,时间复杂度为O(n)。 - 查找:根据元素的值或者下标查找指定元素,需要从头节点开始遍历整个链表,时间复杂度为O(n)。 - 修改:修改指定位置上的元素,需要先找到该节点,然后修改该节点存储的数据,时间复杂度为O(n)。 总体而言,顺序表适用于频繁访问元素,而不频繁修改和删除的场景,链表适用于频繁修改和删除元素的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值