什么是数据结构和算法,一维数据结构,冒泡排序,选择排序,快排,栈和队列

一维数据结构

先来讨论下数组的特性
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数组,这个是非常占据内存的,当然这是一个简化的版本,后期自己可以优化,形成一个完整的版本

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值