关于集合、数据结构(什么是数据结构、逻辑结构 和 存储(物理)结构、数据结构的运算)、底层实现数组的课程笔记

集合:

封装各种各样的数据结构
数组 链表 栈 队列 二叉树

数据结构:
一.什么是数据结构

​ 1.1968年,美国的Donald Ervin Knuth教授开设了一门基本算法的课程,开设了数据结构的先河.

数据结构:研究数据与数据之间的关系,而非计算方法.

程序 = 数据结构 + 算法 -> 沃思,获得图灵奖

2.数据结构的基本概念
数据: 所有能够输入到计算机中去描述事物的符号
数据元素: 数据的基本单位又叫节点,结点,顶点,记录
数据项: 有独立含义的数据最小单位,也叫域.

数据结构: 数据元素和数据关系的集合
算法:数据结构所具备的功能,解决特定问题的方法

二.逻辑结构 和 存储(物理)结构

​ 逻辑结构:
​ 集合: 数据元素同属于一个集体,但是元素之间没有任何关系
​ 线性结构: 数据元素之间存在一对一的关系(表)
​ 树型结构: 数据元素之间存在一对多的关系(倒悬树)
​ 图型结构: 数据元素之间存在多对多的关系(地图)

物理(内存)结构:
顺序结构(数组)
数组存储在连续的内存空间中,用数据元素的相对位置来表示关系.

链式结构(链表)
数据元素存储在彼此独立的内存空间中,每个独立的元素也叫做节点,每个数据元素中增加一个数据项用来存储其他元素的地址,用来表示元素之间的关系.

逻辑结构和物理结构之间的关系:
表 -> 顺序 链式
树 -> 顺序 链式
图 -> 顺序 + 链式

三.数据结构的运算

​ 创建
​ 增
​ 删
​ 改
​ 查
​ 插入
​ 遍历
​ 排序

顺序结构:
底层实现:数组

package data;

import java.util.Arrays;

/*
    底层实现:数组
 */
public class Demo01 {
    private static Object[] arr = new Object[5];
    private static int size=0;
    private static int index=0;


    //1.向集合(this)中末尾添加元素
    public  void add(Object obj){

        if(size==arr.length){
            arr = Arrays.copyOf(arr,arr.length+1);
        }
        arr[size]=obj;
        size++;
    }

    // 2.向集合index的位置中插入obj元素
    public void add(Object obj,int index){
        if(index>size-1&&index<0){
            return ;
        }

        if(size==arr.length){
            arr = Arrays.copyOf(arr,arr.length+1);
        }
        for (int i = arr.length-1; i > index; i--) {
            arr[i]=arr[i-1];
        }
        arr[index]=obj;
    }

    //3.删除指定位置(index)上的元素,并且返回删除的元素
    public void delete(int index){
        for (int i = index; i < size ; i++) {
            arr[i]=arr[i+1];
        }
        //size--;
    }

    //4.删除第一个指定元素(obj)
    public void delete1(Object obj){

        for (int i = 0; i < size; i++) {
            if(arr[i].equals(obj)){
//                for (int j = i; j <size ; j++) {
//                    arr[j]=arr[j+1];
//                }
                delete(i);
                size--;
                break;
            }

        }
    }

    //5.替换指定位置上的元素,替换成obj,并且返回被替换的元素
    public void replace(Object obj,int index){
        for (int i = 0; i < size; i++) {
            if(i==index){
                arr[i]=obj;
            }
        }
    }

    // 6.从集合中获得指定位置(index)的元素
    public void get(int index){
        for (int i = 0; i < size; i++) {
            if(i==index){
                System.out.println(arr[i]);
            }
        }
    }

    //7.获得集合中的元素个数
    public int getLength(){
        return size;
    }

    //8.判断集合中是否存在指定元素obj
    public boolean contains(Object obj){
        for (int i = 0; i < size; i++) {
            if(arr[i]==obj){
                return true;
            }

        }
        return false;
    }

    //9.判断集合是否为空:没有有效元素是空
    public boolean isEmpty(){
        if(size==0){
            return true;
        }
        return false;
    }
    //  10.打印出在集合中的有效元素
    public String toString(){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("[");
        for (int i = 0; i < size; i++) {
            stringBuilder.append(arr[i]);
            if(i<size-1){
                stringBuilder.append(",");
            }
        }
        stringBuilder.append("]");

        String s = stringBuilder.toString();

        return s;
    }


}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值