一维数据结构
先来讨论下数组的特性
1.存储在物理空间上是连续的
2.底层的数组长度是不可变的
我们的计算机的内存中会有很多这样的空间,我们称这种空间叫空间碎片
这样的不是连续的存储空间我们都称为空间碎片
电脑清除空间碎片:需要cpu工作,对你的内存进行重排,这样是非常消耗资源的,也是大牛不会这样写代码的原因
图例:
一维数据结构的两种,数组和链表,大家可以整理和消化下,然后我们来说数组和链表的遍历
数组优缺点
注:所以说数组的长度是不允许被改变的,数组在一出生的时候,就已经确定了它的长度
总结下:
数组:优点:查询性能好(指定查询某个位置) 缺点:1.因为空间必须得是连续的,所以数组比较大,当系统空间碎片较多的时候,容易存不下
2.因为数组长度是固定的,所以数组的内容难以被添加和删除
也就是一维的数据结构,强调的是存储和顺序
一维数据结构中的一种,数组说完了,
第二种,链表
链表简单点理解就是一个对象,对象里面多了一个属性,这个属性指向下一个对象,依次连接起来,就构成了链表
总结下,链表的特点
1.空间上是不连续的
2.每存放一个值,都要多开销一个引用空间(这个就相当于next的属性,是多余的)
链表最后一个要指向null
优点就显而易见了:
1.只要内存足够大,就能存的下,不用担心空间碎片的问题
2.链表的添加和删除非常容易
缺点一样的也很清楚
1.查询数组慢(指的是查询某个位置)
2.链表每一个节点都需要创建一个next的引用,浪费一些空间(其实当链表大的时候,这个空间就是可有可无的,简单点说,两个人吃火锅,锅底50,三个人也是50,100个人还是50,越大影响越小)
实现一组对象代码:
实现一个链表的标准肯定是用构造函数完成
这里实现一个完整的链表代码:
遍历最常见的两种,循环遍历,第二种,递归遍历
链表的循环遍历
链表的递归遍历
数组的循环遍历
严谨性:
这个是数组的循环遍历,很简单哈,提示点,算法一般大公司都是机试题,一定要注意代码的严谨性,加上一个严谨判断
数组的递归遍历
栈结构:先入后出
队列结构: 先入先出
栈结构想成一个箱子,先放进去的,被压在下面
队列结构想成一个管道
1.封装栈结构代码示例:
2.封装队列结构代码示例:
排序
排序里面无非就是两个过程,比较过程,交换过程,我们既然完成算法,我们就要把这两个过程进行分离,加上严谨
1.冒泡排序:
2.选择排序的思路跟冒泡差不多,一个是冒泡到最后,一个是放到最后
3.最后说下快排:快排的思路
有个数组591367284,选定第一个数字5,接下来,比5小的站左边,比5大的站右边,这个时候就形成了两个数组,依次类推,拼接,就是快排的思想
这个快排不是特别的严谨,大家应该是可以看到,里面创建了很多的left和right数组,这个是非常占据内存的,当然这是一个简化的版本,后期自己可以优化,形成一个完整的版本