数据结构入门小结

什么是数据结构

数据结构,直白地理解,就是研究数据的存储方式,选择一种好的方式存储数据,也是数据结构的核心内容。

学习数据结构,学的就是如何存储具有复杂关系的数据的存储,这样更有利于我们后期对数据的使用

数据结构到底学什么

数据结构大致包含以下几种存储结构

  • 线性表,还可以细分为顺序表,链表,栈和队列;
  • 树结构,包括普通数,二叉树,线索二叉树等;
  • 图存储结构
线性表

线性表的数据往往依次排列,往往可以存储具备"一对一"关系的数据结构

线性表不是一种具体的存储结构,他包含顺序存储结构和链式存储结构,是顺序表和链表的总称

顺序表

简单理解,就是常用的数组换了个名字而已
如图:
在这里插入图片描述

顺序表的底层实现是借助数组的,但顺序表不是数组,绝不可以把顺序表等价为数组

链表

我们知道,顺序表使用前,需要提前申请一定大小的存储空间,这块存储空间是连续的

链表完全不一样,使用链表存储数据的时候,是随用随申请的,因此存储位置和数据是相互分离的,换句话说,数据存储位置是随机的

栈和队列

栈和队列只是特殊的线性表,他们对线性表中的元素做了明确的要求

栈中的元素只能从线性表的一端进入(另一端封死),切要遵循先入后出的原则
图三,栈结构示意图
队列中的元素只能从线性表的一端进入从另一端出,遵循先入先出的特点
图四、队列结构示意图

树的存储结构

树存储结构适合存储具有“一对多”关系的数据。
在这里插入图片描述

图存储结构

图存储结构适合存储具有“多对多”关系的数据。
在这里插入图片描述

数据的逻辑结构和存储结构(物理结构)

数据的存储结构取决于两方面,即逻辑结构和存储结构(又物理结构)

逻辑结构

数据的逻辑结构,简单理解,就是指数据之间的逻辑关系。
数据之间的逻辑关系可以分为三类:

  • “一对一” 线性表
  • “一对多” 树结构
  • “多对多” 图结构
    我们可以通过分析数据的逻辑结构来决定使用哪种存储结构
存储结构

数据的存储结构,也就是物理结构,指数据在物理存储空间上选择是集中存放还是分散存放。
集中存储选择顺序存储结构;反之,使用链式存储,主要取决于存储设备的状态即用途。

时间复杂度和空间复杂度

“好”算法的标准
  • 准确性:算法能不能完全解决问题
  • 健壮性:根据算法编写出来的程序在任何情况下都不崩溃

运行效率

  • 时间复杂度:程序的运行时间
  • 空间复杂度:程序运行所需的内存空间大小
时间复杂度

实际上,表示一个算法所编写程序的运行时间所用的不是准确值,而是根据合理方法得到的预估值

数据结构中,每条语句的执行次数,又被称为该语句的频度

举个栗子

for(int i = 0 ; i < n ; i++)     //<- 从 0 到 n,执行 n+1 次
{
    a++;                         //<- 从 0 到 n-1,执行 n 次
}
for(int i = 0 ; i < n ; i++)           // n+1
{ 
    for(int j = 0 ; j < m ; j++)       // n*(m+1)
    {
        num++;                         // n*m
    }
}
大 O 记法的表示方法也很简单,格式如下:
O(频度)
O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n2)平方阶 < O(n3)(立方阶) < O(2n) (指数阶)
空间复杂度

和时间复杂度类似,一个算法的空间复杂度,也常用大O表示

要知道每一个算法所编写的程序,运行过程之中都需要占用大小不等存储空间,例如:

  • 程序代码本身所占用的存储空间;
  • 程序中如果需要输入输出数据所占用的存储空间
  • 程序在运行过程中,还可能申请的更多的临时的存储空间

事实上,对算法的空间复杂度影响最大的,往往是程序运行过程中所申请的临时存储空间。不同的算法所编写出的程序,其运行时申请的临时存储空间通常会有较大不同

在多数场景中,一个好的算法往往更注重的是时间复杂度的比较,而空间复杂度只要在一个合理的范围内就可以。

数据结构和算法的区别

我们可以从分析问题的角度去理清楚数据结构和算法之间的关系。通常,每个问题的解决都要经过一下几个步骤:
1、分析问题,从问题中提取有价值的数据,将其存储
2、对存储的数据进行分析,最终的出答案

数据结构负责解决第一个问题,即数据的存储问题。通过前面的学习我们知道,针对数据不同的逻辑结构和物理结构,可以选出最优的数据存储结构来存储数据。

而剩下的第二个问题,属于算法的职责范围。算法,从表面意思来理解,即解决问题的方法。我们知道,评价一个算法的好坏,取决于在解决相同问题的前提下,哪种算法的效率最高,而这里的效率指的就是处理数据、分析数据的能力。

因此我们得出这样的结论,数据结构用于解决数据存储问题,而算法是思考如何利用存储的数据快速无误地解决问题,它们是完全不同的两类学科。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值