学数据结构需要搞清楚的概念

学习数据结构之前需要明白的几个问题

1.程序是什么?
程序是为了解决实际问题而存在的,从本质上而言,程序是解决问题的步骤描述!
2.程序怎么高效?
用尽量少的时间解决问题,用尽量少的步骤解决问题,用尽量少的内存解决问题。
3.数据结构课程的作用
教会我们如何运用高效的方法解决问题!!
4.数据结构课程的研究范围
-非数值计算类型的程序问题
-研究数据间的组织和操作方式,为设计算法做准备的,这会牵扯到数据的逻辑结构 -------和 存储结构

小结:

      程序 = 数据结构 + 算法;
      实际上就是:怎么样去组织相关数据;
                 怎么样操作数据解决问题。

数据的概念

什么是数据?
程序操作的对象,用于描述客观事物,由数据元素组成。
数据的特点:
1.可以输入到计算机;2.可以被计算机程序处理;满足这2个条件才是数据。
数据元素:
组成数据的基本单位
数据项:
一个数据元素由若干数据项组成
数据对象:
性质相同的数据元素的集合

struct Student              数据类型
{
    char* name;
    int age;
};
Student   s;                数据元素
Student  sArray[10];        数据对象
s.name = "abcd";            数据项
s.age = 1;                  数据项

数据结构:指 数据对象 中 数据元素 之间 的关系!!!!!!
数据结构:指 数据对象 中 数据元素 之间 的关系!!!!!!
数据结构:指 数据对象 中 数据元素 之间 的关系!!!!!!

数据元素之间不是独立的,这种存在特定的关系,称为结构。
如:数组中各个元素之间存在固定的线性关系。

编写一个“好”的程序之前,必须分析待处理问题中各个对象的特性,以及对象之间的关系。

那么数据有哪些结构呢?
一:逻辑结构----抽象的结构

  1. 集合结构:-数据元素之间没有特别的关系,仅同属相同集合。
  2. 线性结构:-数据元素之间存在 一对一 的关系。
  3. 树形结构:-数据元素之间存在 一对多 的关系。
  4. 图形结构:-数据元素之间存在 多对多 的关系。

二:物理结构----内存的结构

1.顺序存储结构:-将数据存储在地址连续的存储单元里。
2.链式存储结构:-将数据存储在任意的存储单元里,
通过保存地址的方式找到相关联的数据元素。

程序的灵魂–算法

数据结构是什么呢? 数据结构静态的描述了数据元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法。那算法是什么呢? 算法是特定问题求解步骤的描述,在计算机中表现为指令的有限序列。 算法是独立存在的一种解决问题的方法和思想。

算法的特性:

  1. 输入:算法具有0个或多个输入

  2. 输出:算法至少有1个或多个输出

  3. 有穷性:算法在有限的步骤之后(可接受的时间之内)会自动结束而不会无限循环

  4. 确定性:算法中的每一步都有确定的含义,不会出现二义性

  5. 可行性:算法的每一步都是可行的

  6. 正确性:

  7. 可读性:算法要方便阅读,理解和交流

  8. 健壮性:算法不应该产生莫名其妙的结果

  9. 性价比:利用最少的资源得到满足要求的结果

    小结:算法为了解决实际问题而存在,数据结构是算法处理问题的载体,数据结构与算法相辅相成,共同解决问题! 
    

算法的效率

一般而言,我们在编写算法的时候强调的是算法的性价比,那么怎样才能提高性价比呢?
此时,我们需要分析影响算法效率的主要因素。
–影响算法的主要因素:

  1. 算法采用的策略和方法

  2. 问题的输入规模

  3. 编译器所产生的代码

  4. 计算机执行速度
    对于程序员而言,算法采用的策略和方法以及问题的输入规模是关键因素。

    说白了:我们在子程序中写解决问题的方法的时候,在子程序中如何在不同的方法中采用最少的步骤解决同样的问题!!

算法的时间复杂度

什么是算法的时间复杂度呢?算法运行后对时间需求量的定性描述!数据结构课程重点关注的是算法的效率问题,因此,整个课程会集中讨论算法的时间复杂度;但其使用的方法完全可以用于空间复杂度的判断!
为什么需要时间复杂度呢?目的在于去评估随着问题的输入规模增大后,我们的子程序解决问题需要的步骤是什么样的一种增长方式。上面说我们要用最少的步骤解决问题,那么这个步骤就由时间复杂度来衡量。
时间复杂度用什么表示呢? 大O表示法!
算法效率严重依赖于操作数量,操作数量的估算可以作为时间复杂度的估算,在判断时首先关注操作数量的最高次项。

常见的时间复杂度:
1.常数阶: O(1)
2.对数阶: O(logn)
3.线性阶: O(n)
4.nlogn阶:O(nlogn)
5.平方阶: O(n
n)
6.立方阶: O(nnn)
7.指数阶: O(2N)
8.阶乘阶: O(n!)

算法的最好与最坏情况
意义:当算法在最坏情况下任然能满足需求时,可以推断,算法的最好情况和平均情况都能满足需求。一般而言,我们在进行算法分析时,看最坏情况下的时间复杂度。

时间与空间的策略:
多数情况下,算法时间度更令人关注,如果有必要,可以通过增加额外空间降低时间复杂度,同理,也可以用时间换空间。

总结

数据结构:就是静态的描述数据之间的关系,也就是我们在编程的时候想办法怎么样去组织好数据之间的关系以便于算法去操作。这里要理清楚数据的概念。
算法:说白了就是解决问题的方法,也就是我们编写函数内部的代码。这块代码的输入就是函数参数,输出就是函数处理数据后的结果,解决问题的方法的过程就牵扯到要用多少步骤去解决,而这个步骤的多少用“O”表示法来描述。一般的,一条语句,一步就完成,,可以忽略。重点:步骤规模增大的地方在于循环,一层循环,二层循环,三层循环等。这里在设计函数的时候要考虑算法的特性,以及对循环要敏感,能用一层循环解决最好不要用二层循环。

有了上面这些概念后,我们就可以开始去探索那些线性结构,比如:数组,链表,队列,栈等;树形结构。。。

注:本文来自狄泰软件学院课程学习总结整理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值