数据结构1.0

哈喽哈喽,大家好,屏幕前的你们在嘎嘛捏?(>人<;)哦对 看博客啊

这个栏目的初心是:帮助大家学习数据结构

那么,我们现在开始叭

你为什么要学习数据结构呢?

哦对,别人说是为了为算法打基础,那么为什么学习算法呢?别人说是为了..........无限套娃

自我介绍一下,我是一名大二在读本科生,网名叫兮屿(初中的时候感觉很好听就一直用着了)

闲话不唠了,现在真的开始咯~

如何学好数据结构?

老师告诉我说同时做到: 多画图 多思考 多写代码  那我先替你们试着后续有想法了也会积极迭代分型的。

老师还说当时侯他每天没事的时候 就自己写一遍数据结构,暂时不懂这个写一遍数据结构是什么意思哈哈哈。

前置知识:

泛型  包装类  集合框架

集合框架里面有对应的集合类,集合类背后有数据结构,所以我们先学习数据结构,然后再学习集合类,然后再学习集合框架。

一、初识

1.0  什么是数据结构 

 数据结构=数据+结构   描述或者组织一些数据

数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

2.0 我们要学习哪些数据结构呢?

奉上一张图片~

图片有点模糊(后面我慢慢迭代,第一次写多多见谅呜呜呜)

图片内容瞎写一下(我也不知道内容是什么)

二、 时间和空间复杂度

1.0 如何衡量一个算法的好坏?

算法是解决问题的一种方式  在电脑上解决问题 

两个标准  时间和空间     花费时间或占用电脑空间

时间被称为 时间复杂度  空间被称为:________(kjfzd)

2.0时间复杂度

这个不是具体多少分钟多少秒啊,是一个数学函数,它定量描述了该算法的运行时间

从理论上来说,一个程序的运行时间是不能算出来的,你自己想想为什么,和呢个电灯泡的合格率一个道理。

算法中基本操作的执行次数,为算法的时间复杂度。(我用deepseek搜索是有点问题,大家也是试试deepseek,尊嘟很方便 网址:DeepSeek | 深度求索

    a.0     大O渐进表示法

              1.用常数1取代运行时间中的所有加法尝数。

              2.只保留最高阶。

              3.如果最高阶存在且不是1,则去与这个项目相乘的常数,得到的结果就是大O阶。

              有最好  最坏  平均情况

              总结:常数去了 只保留最高阶 最高阶的常数去了

             示例:3N平方+2N+123123-------> N平方

                       (大家也可以自己探索一下 还有哪些奇葩的 比如常数1 )

            最重要的问题:为什么大O渐进表示法要这么规定?  因为取影响最高的,便捷 

a.1  常见时间复杂度计算举例 :  大家可以找找刚刚的deepseek

        

(靠了对不qi将就看吧先 以后我注意)

冒泡排序   ( 最好 最坏  平均)  这个大家要注意,我感觉有点小坑

二分查找   

讲解一下:每次砍一半  然后再砍一半  直到找到 所以就是2的n次方 倒过来就是log的那个

递归的时间复杂度

常见复杂度

3.0  空间复杂度

一个算法在运行过程中临时占用存储空间大小的量度。

想想  这个大小量度是什么?   什么占用存储空间 

答案:xxxxxxxxxxxxxxxxxxx

           空间复杂度是变量的个数

三、包装类 

1.0 除了Integer和Character 其余基本类的包装类都是首字母大写。

     为什么要有包装类 : 

2.0 装箱和拆箱

(突然发现这么写 速度有点慢啊)

装箱

四、泛型

这个比前面要复杂一点

推荐大家去b站上面找课,这么短的时间理解不了泛型

1.0  什么是泛型

一般的类和方法,只能使用具体的类型:要么基本类型,要么自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。

理解:定义了一个A类里面有个数组 这个数组是具体固定的 但是能不能用int数组的时候改为int数组,用String数组的时候改为String数组呢? 可以

泛型:就是适用于许多类型。

泛型类 

class 泛型类名称 <类型参数列表>{

}

例如:class className <T1 ,T2 ,T3>{

}

类名后面的<T>表示占位符,表示当前类是一个泛型类。

对 是你想的那样 里面的T也可以换

2.0 泛型类的使用

泛型类<类型实参>  变量名; //定义一个泛型类引用

new 泛型类 <类型实参>(构造方法实参);//实例化一个泛型类型的对象

MyArray <Integer>   list  = new MyArray<Integer>();

MyArray                   list  = new MyArray(); 大家类比着记,或者直接用几遍就熟悉了

MyArray <Integer> list = new MyArray<>();

// 泛型只能接受类,所有的基本数据类型必须使用包装类!!!

3.0 泛型的优点

数据类型参数化,编译时自动进行类型检查和转换。

3.0 泛型的擦除机制

一句话:编译的时候是泛型 编译之后生成的字节码文件在运行期间并不包含泛型的类型信息。

4.0 泛型的上界

在定义泛型时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

class  泛型名称  <类型形参 extends 类型边界>

这里的extends不是继承的意思啊 就是扩展的意思 

因为你先学的继承所以会认为extends是继承哈哈哈

public  class MyArry <E extends Number>{      }

四、泛型方法

自己试着尝试揣测一下哦

哈哈 我没有推倒对

public <T>  void fangFaMIng  (    ){            }

对  就是修饰符后面加  哈哈哈

有static需要放在static后面

public static <T> void fangFaMing (   ){           }

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值