顺序表(java)详解(小白专用)

文章目录

  • 顺序表(java)详解(小白专用)
    • 1.顺序表是什么?
    • 2.顺序表的利弊?
    • 3.顺序表代码实现步骤?
  • 总结

顺序表(java)详解(小白专用)

1.顺序表是什么?

  • 顺序表就是在数组上完成增删改查。
  • 顺序表分为:动态和静态顺序表。
  • 静态顺序表用于知道要用多少数据的工作场景。
  • 动态顺序表可动态分配使用空间。

2.顺序表的利弊?

  1. 利:比链表查询的速度快;
  2. 弊:添加空间比较麻烦,浪费空间现象比较严重;增删改比链表麻烦些。

3.顺序表代码实现步骤?

  • 顺序表需要哪些属性?

  • 顺序表需要实现哪些功能?

  • 代码如下:

  1. 创建SeqList类
// 创建一个SeqList类
public class SeqList {
     

	public int[] elem;	// 定义存储数据的数组
	public int usedSize;	// 定义使用数组空间的长度
	
	// 创建这个类的构造方法
	public SeqList() {
     
		this.elem = new int[5];	// 分配5个空间给数组elem
	}
}


2.添加addNum方法 (注意:与上面在同一个类中

	// pos代表插数的位置  data代表所插得数
	 public void addNum(int pos, int data) {
     
	 		// 判断使用的空间是否不足
	        if (this.usedSize == this.elem.length) {
     
	            System.out.println("空间沾满了!");
	            return;
	        }
		
			// 判断pos位置的合法性(顺序表是连续且顺序的,不能超过使用的长度,也不能不存在)
	        if (pos < 0 || pos > this.usedSize) {
     
	            System.out.println("pos位置不合法!");
	            return;
	        }
			
			// 向数组中任意位置插数值 (每插一个值,pos往后的值往后挪动一位且使用的长度加一)
	        for (int i = this.usedSize - 1; i >= pos; i++) {
     
	            this.elem[i + 1] = this.elem[i];
	        }
	        this.elem[pos] = data;
	        this.usedSize++;
	    }

3.遍历顺序表


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

4.查询一个数是否被包含数组内,包含则返回数组下标


	//数组内是否包含,包含的话返回数组下标
    public int search(int toFind) {
     
        for (int i = 0; i < this.usedSize; i++) {
     
            if (this.elem[i] == toFind) {
     
                return i;
            }
        }
        return -1;
    }

5.查询一个数是否被包含在数组内

 //数组是否包含数字,包含返回true,反之false
    public boolean contains(int toFind) {
     
        for (int i = 0; i < this.usedSize; i++) {
     
            if (this.elem[i] == toFind) {
     
                return true;
            }
        }
        return false;
    }

6.获取pos位置上的元素

	// 判断使用的空间是否为空
	 public boolean isEmpty() {
     
	        if (this.usedSize == 0) {
     
	            return true;
	        }
	        return false;
	    }
    //获取pos的位置上的值
    public int getPos(int pos) {
     
        if (isEmpty()) {
     
            return -1;
        }
        if (pos < 0 || pos >= this.usedSize) {
     
            return -1;
        }
        return this.elem[pos];
    }

7.修改pos位置上的值

	// 判断使用的空间是否为空
	public boolean isEmpty() {
     
	        if (this.usedSize == 0) {
     
	            return true;
	        }
	        return false;
	    }

	//修改pos位置上的值
    public void updatePos(int pos, int val) {
     
        if (isEmpty()) {
     
            return;
        }
        if (pos < 0 || pos >= this.usedSize) {
     
            return;
        }
        this.elem[pos] = val;
    }

8.删除第一次出现key的数字(注意:别忘了将usedSize - -

	//删除第一次出现的数字
    public void deleteOne(int key) {
     
        // key的下标
        int index = search(key);

		// 删谁从谁那开始
        for (int i = index; i < this.usedSize - 1; i++) {
     
            this.elem[i] = this.elem[i + 1];
        }
        usedSize--;
    }

9.清除数组值和查询使用的长度


	//清除数据
    public void clear() {
     
        this.usedSize = 0;
    }

    //使用的长度
    public int size() {
     
        return this.usedSize;
    }

10.测试后结果

顺序表(java)详解(小白专用)_第1张图片
运行结果如下:
顺序表(java)详解(小白专用)_第2张图片

建议: 多测几个测试用例!!!

总结

  1. 多思考顺序表实现的过程
  2. 理解顺序表的各种功能
  3. 建议画图编码并用,以便更好理解
  4. 理解之后,多多练习,你的思维会有更好的提升

你可能感兴趣的:(java,链表,数据结构)