码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构之顺序表

时间:2019-11-12 19:49:33      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:sys   物理地址   print   实现   this   空间   超出   长度   new   

顺序表:是用一段物理地址连续的存储单元依次存储数据元素的线性结构。它的空间是连续的。
下面以数组存储的形式实现顺序表(增删查改)

1.先定义变量,并实现打印顺序表

    private int[] data = new int[10];
    private int size = 0; // size 表示当前数组中有多少个有效元素

    public void display() {  //打印顺序表
        System.out.print("["); //以数组的形式输出
        for (int i = 0; i < size; i++) {
            System.out.print(data[i]);
            if(i != size - 1) {
                System.out.print(",");
            }
        }
        System.out.println("]");
    }

2.在pos位新增元素

public void add(int pos, int elem) {    //elem表示插入的元素
        if(pos > data.length || pos < 0) { 
            return;
        }
        if(size > data.length) {  //超出范围
            realloc();  //需要扩容
        }
        if(pos == size) {
            data[pos] = elem;
            size++;
        }
        else {
            for(int i = size; i > pos; i--) {
                data[i] = data[i - 1];
            }
            data[pos] = elem;
            size++;
        }
    }

附扩容的方法:

public void realloc( ) { //对数组扩容
        int[] newData = new int[this.data.length * 2];
        for(int i = 0; i < this.data.length; i++) {
            newData[i] = this.data[i];
        }
        this.data = newData;
    }

3.判断是否包含某个元素

public boolean contains(int toFind) {
        for(int i = 0; i < this.size; i++) {
            if(this.data[i] == toFind) {
                return true;
            }
        }
        return false;
    }

4.查找某个元素对应的位置

public int search(int toFind) {
    for(int i = 0; i < this.size; i++) {
        if(this.data[i] == toFind) {
            return i;
        }
    }
    return -1;
}

5.获取pos位置的元素

public int getPos(int pos) {
    return  this.data[pos];
}

6.给pos位置元素设为value

public void setPos(int pos, int value) {
    this.data[pos] = value;
}

7.删除第一次出现的关键字

public void remove(int toRemove) {
    int pos = search(toRemove);//对关键字进行查找
    if(pos == -1){
        return;
    }
    if(pos == this.size - 1) {
        this.size--;
        return;
    }
    for (int i = pos; i < this.size; i++) {
        this.data[i - 1] = this.data[i];
    }
    this.size--;
}

8.获取顺序表的长度

public int size() {
    return this.size;
}

9.清空顺序表

public void clear() {
    this.size = 0;
    this.data = new int[10];
}

数据结构之顺序表

标签:sys   物理地址   print   实现   this   空间   超出   长度   new   

原文地址:https://blog.51cto.com/14298563/2449666

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!