JAVA顺序表和列表

顺序表和列表的学习
数据结构+算法

算法效率:
算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被 称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额 外空间,

时间复杂度: 大概的时间 ,代码当中基本语句的执行次数 ,用大O渐进法表示法
空间复杂度: 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度也使用大O渐进表示法

大O渐近法:
N:问题的规模
1、保留最高阶项
2、去掉最高项系数
3、用常数1取代运行时间中的所有加法常数。即100 为1

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见 的线性表:顺序表、链表、栈、队列、字符串

那么如何学好数据结构???画图!!!逻辑思路!
顺序表是依靠数组所实现的一种数据结构

Class 顺序表 {
成员属性
成员方法
}

接口实现:
实现一个动态顺序表. 以下是需要支持的接口

import java.util.Arrays;

//顺序表
public class MyArrayList {
    //属性
    public int [] elem;
    public int usedSize;
    private final int CAPACITY = 5;

    public MyArrayList() {
        this.elem = new int[CAPACITY];
        this.usedSize = 0;
    }
    //方法

        // 打印顺序表
        public void display() {
            for(int i = 0;i < this.usedSize;i++) {
                System.out.println(this.elem[i] + " ");
            }
        }
        private boolean isFull() {
           /* if(this.usedSize == the.elem.length) {
                return ture;
            }
            return false;*/

           return this.usedSize == this.elem.length ;
        }
        // 在 pos 位置新增元素
        public void add(int pos, int data) {
            if(isFull()) {
                //二倍扩容
                this.elem = Arrays.copyOf(
                        this.elem,this.elem.length*2);
            }
            if(pos < 0 || pos > this.usedSize) {
                System.out.println("该位置不合法");
                return;
            }

            //挪数据
            for(int i = this.usedSize - 1;i >= pos;i--) {
                this.elem[i+1] = this.elem[i];
            }
            this.elem[pos] = data;
            this.usedSize++;
        }
        // 判定是否包含某个元素
        public boolean contains(int toFind) {
            for(int i = 0;i < this.usedSize;i++) {
                if (this.elem[i] == toFind) {
                 return true;
                }
            }
            return false;
        }
        // 查找某个元素对应的位置
        public int search(int toFind) {
            for(int i = 0;i < this.usedSize;i++) {
                if (this.elem[i] == toFind) {
                    return i;
                }
            }
            return -1;
        }
        // 获取 pos 位置的元素
        public int getPos(int pos) {
            if(pos < 0 || pos >= this.usedSize) {
                System.out.println("pos位置不合法");
                return -1;  //代表没有pos位置
            }
            return this.elem[pos];
        }
        // 给 pos 位置的元素设为 value
        public void setPos(int pos, int value) {   }
        //删除第一次出现的关键字key
        public void remove(int toRemove) {
            int index = search(toRemove);
            if(index == -1) {
                System.out.println("找不到要删除的数字");
                return;
            }
            for(int i = index;i < this.usedSize-1;i++) {
                this.elem[i] = this.elem[i+1];
            }
            this.usedSize--;
        }
        // 获取顺序表长度
        public int size() {
            return this.usedSize;
        }
        // 清空顺序表
        public void clear() {
            this.usedSize = 0;
        }

}

最后演示如下:

在这里插入图片描述
运行结果为:

在这里插入图片描述

发布了43 篇原创文章 · 获赞 41 · 访问量 1797

猜你喜欢

转载自blog.csdn.net/weixin_45662626/article/details/102835414