Java实现顺序表

顺序表就是把线性表中的所有元素按照其逻辑顺序,依次储存到从指定的储存位置开始的一块连续的储存空间中,以下是实现代码,注释已写得很清楚故不过多赘述

package Structure;

import java.util.Arrays;

public class SeqList {
    int length;
    int data[];

    /**
     * 无参构造,创建空顺序表
     */
    public SeqList() {
    }

    /**
     *
     * @param capacity
     * @param data
     * 创建指定容量和内容的顺序表
     */
    public SeqList(int capacity, int[] data) {
        if(data.length>capacity){
           throw new IndexOutOfBoundsException("数组长度超过了创建表的容量");
        }else{
            this.data=new int[capacity];
            this.length=0;
            for(int i=0;i<data.length;i++){
                this.data[i]=data[i];
                this.length++;
            }
        }
    }

    /**
     *
     * @param length
     * 创建最大容量为length的顺序表
     */
    public SeqList(int length) {
        this.data=new int[length];
        this.length = 0;
    }

    /**
     *
     * @return
     * 判断顺序表是否为空
     */
    public boolean isEmpty(){
       if(this.length==0&& this.data==null)return true;
       return false;
    }

    /**
     *清空顺序表
     */
    public void clear(){
        this.data=null;
        this.length=0;
    }

    /**
     *
     * @param insert
     * 向表尾添加元素
     */
    public void add(int insert){
        if(this.length>=this.data.length){
            System.out.println("表已无剩余容量");
            return;
        }
        this.data[this.length]=insert;
        this.length++;
    }

    /**
     * 在指定位置插入元素
     * @param index
     * @param element
     */
    public void insert(int index,int element){
        if(this.data.length==this.length){
            System.out.println("容量已满");
            return;
        }
        for(int i=this.length;i>index;i--){
            this.data[i]=this.data[i-1];
        }
        this.data[index]=element;
        this.length++;
    }

    /**
     * 删除指定位置数据
     * @param index
     */
    public void delete(int index){
        if(index<0||index>=this.length){
            throw new IndexOutOfBoundsException();
        }else {
            for(int i=index;i<this.length-1;i++){
                this.data[i]=this.data[i+1];
            }
            this.data[this.length-1]=0;
            this.length--;
        }
    }

    /**
     * 获取指定位置的数据
     * @param index
     * @return
     */
    public int getNum(int index){
        if(index<0||index>=length){
            throw new IndexOutOfBoundsException();
        }
        return this.data[index];
    }

    /**
     * 扩容
     */
    public void grow(){
        //int temp[]=new int[this.data.length*2];
        int temp[]=Arrays.copyOf(this.data,this.data.length*2);
        this.data=temp;
    }

    /**
     * 顺序表反转
     */
    public int[] revers(){
        int start=0,end=this.length-1,temp=0;
        for(;start<end;start++){
            temp=this.data[start];
            this.data[start]=this.data[end];
            this.data[end]=temp;
            end--;
        }
        return this.data;
    }

    /**
     * 顺序表排序
     * @return
     */
    public int[] sort(){
        int temp=0;
        for(int i=0;i<length-1;i++){
            for(int j=i;j<length;j++){
                if(this.data[i]>this.data[j]){
                    temp=this.data[i];
                    this.data[i]=this.data[j];
                    this.data[j]=temp;
                }
            }
        }
        return this.data;
    }
    /**
     * 获取最大容量
     * @return
     */
    public int maxV(){
        return this.data.length;
    }

    /**
     * 重写tostrng方法
     * @return
     */
    @Override
    public String toString() {
        String temp="["+this.data[0];
        for(int i=1;i<this.length;i++){
            temp=temp+','+this.data[i];
        }
        temp=temp+"]";
        return "SeqList{" +
                "data=" + temp +
                '}';
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西华老中医

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值