第一章 绪论

第一章 绪论

一、数据结构是什么,算法是什么?

至今为止,对于数据结构的定义,还没有统一的标准。但我们可以先简单的理解为:数据+结构

算法是为了解决某类问题而规定的一个有限长的操作序列

二、为什么要学数据结构?

早期的计算机主要用于数值计算。如今,计算机处理的数据已经不局限于数值,还包括字符、表格、图像等具有一定结构的数据。而高效的处理、组织这些数据成为了一个很重要的问题。“数据结构”就是来研究解决这些问题的

三、数据结构的基本概念与术语

1、数据、数据元素、数据项、数据对象

  • 数据: 客观事物的符号表示,是所有计算机程序处理的符号的总称。
  • 数据元素: 数据的基本单位。
  • 数据项: 组成数据元素的、有独立含义的、不可分割的最小单位。
  • 数据对象: 性质相同的数据元素的集合,是数据的一个子集。

2、数据结构

  • 逻辑结构:从逻辑关系上描述数据,是从具体问题抽象处理的数学模型,与数据在计算机中的存储无关。
    • 集合结构:数据元素之间除了属于同一集合,没有其他关系。
    • 线性结构:数据元素之间存在一对一的关系。
    • 树结构:数据元素之间存在一对多的关系。
    • 图结构/网状结构:数据元素之间存在多对多的关系。
  • 存储结构(物理结构):数据在计算机中的存储结构
    • 顺序存储结构:逻辑上相邻,物理上也相邻。
    • 链式存储结构:逻辑上相邻,物理上不相邻。

3、数据类型与抽象数据类型

  • 数据类型: 一个值的集合和定义在这个值集上的一组操作的总称。

    例如:C语言中的整型变量,其值集为某个区间的整数,定义在其上的操作为加减乘除

  • 抽象数据类型: 指有用户定义的、表示应用问题的数学模型,已经定义在这个模型上的一组操作的总称

4、数据结构学习的内容

在这里插入图片描述

四、算法与算法分析

由于算法联系着数据在计算过程中的组织方式,在描述实现某种操作,常常需要设计算法。

1、算法的特性:

  • 有穷性: 一个算法必须总是在执行又穷步后结束,且每一步必须在又穷时间内完成。
  • 确定性: 每次执行的操作在算法中必须有确切的规定,不会产生歧义性。
  • 可行性: 所有操作都可执行,且在有限次数执行完成。
  • 输入输出: 对函数的形参进行输入,执行操作完成后有输出,没有输出的算法是无意义的。

2、算法优劣的评价标准

  • 正确性
  • 可读性
  • 健壮性
  • 高效性

3、算法的时间复杂度

当数据量十分庞大时,需要考虑程序的执行时间,完成同一操作,执行时间越短越好。

时间复杂度的计算

计算算法的时间复杂度,需要计算每一步操作的执行次数,取执行次数最多的操作为该算法的时间复杂度

//常数阶
for(i=0;i<10000;i++){
    x++;
}
/*
虽然循环10000次,但算法执行时间是一个固定值,与问题规模n无关,因此该算法的时间复杂度为O(1)。
*/
//线性阶
for(i=0;i<n;i++){
    x++;
}
/*
该算法执行n次,算法的执行时间与问题规模n呈线性关系,时间复杂度O(n).
*/
//平方阶
for(i=0;i<n;i++){
    for(j=0;j<n;j++){
        x++;
    }
}
/*
该算法内层操作执行次数最多,执行了n^2次,算法的执行时间与问题规模n呈平方关系,时间复杂度O(n²)。
*/
//对数阶
i=1;
while(i<n){
    i=i*2;
}
/*
假设循环执行了x次,那么2的x次等于n,x为log n,时间复杂度O(logn)。
*/
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值