数据结构(第一章基本概念,学习笔记)

第一章

1.数据结构的基本概念

1.1数据结构学什么?

  如何将现实问题信息化?如何高效处理信息创造价值?
  数据结构 = { D,R},D是某一数据对象;R是该集合中所有数据元素间的关系的有限集合。
====》数据结构包括:逻辑结构存储结构数据运算
  算法的设计取决于逻辑结构,算法的实现依赖于所采用的存储结构

1.2基础概念

  <1>数据 > 数据对象 > 数据元素 > 数据项
  <2>数据结构:存在特定关系的数据元素的集合。
    数据对象:具有相同性质的数据元素的集合。
如:海底捞排队系统中顾客之间的先后关系。
  类似餐馆的排队系统与其顾客信息大致相同。

1.3数据结构三要素

  逻辑结构、物理结构(存储结构)、数据的运算。
  <1>逻辑结构(元素之间关系)
  面向实际问题,只采用抽象表达,独立于存储结构。
    线性结构:一对一
      ①一般线性表:线性表。
      ②受限线性表:栈、队列、串。
      ③线性表推广:数组、广义表。
    非线性结构:(二维数组、多维数组等)
      ①集合:空
      ②树形结构(一般树、二叉树):一对多
      ③图状结构(网状结构)(有向图、无向图):多对多
  <2>物理结构(存储结构)
  逻辑结构在计算机上的映射,不能独立于逻辑结构而存在。
    ①顺序存储:逻辑相邻、物理相邻。
    ②链式存储:逻辑相邻、物理相邻。(结点内存储单元地址一定连续)
    ③索引存储:存储信息同时建立索引表。
    ④散列存储:(哈希存储)根据元素关键字计算存储地址。
    PS:②、③、④属于非顺序存储。
      ①、②:内存。③、④外存
  <3>数据的运算
    施加在数据上的运算包括定义(指出运算功能,针对逻辑结构)和实现(运算的具体操作步骤,针对存储结构)。
PS:
  确定一种存储结构,就意味着计算机中表示出数据的逻辑结构。存储结构不同,也会导致运算的具体实现不同。故只有确定存储结构才能实现数据结构
  数据的逻辑结构(面向实际问题的角度出发的)独立于其存储结构【反之不然】。
  存储数据时,不仅要存储元素的值,还要存储元素之间关系。

1.4数据类型和抽象数据类型

  <1>数据类型:一个值的集合和在此集合上的一组操作 的总称。
    ①原子类型:其值不可再分。
    ②结构类型:其值可以再分。
  <2>抽象数据类型:(Abstract Data Type,ADT):抽象数据组织及与相关的操作
    用数学化的语言定义数据的逻辑结构数据的运算,与实现(物理结构)无关通常用数据对象数据关系基本操作集三元组表示,构成一个完整的数据结构

2.算法和算法评价

2.1算法的基本概念:

  对特定问题求解步骤的一种准确而完整描述,是一系列解决问题的清晰指令,能够对一定规范的输入,在有限时间内获得所要求的输出。
  <1>重要特性(5种):
    ①有穷性:有穷步骤,有穷时间。(程序可以是无穷的)
    ②确定性:相同输入,相同输出。
    ③可行性:用已实现的基本运算执行有限次实现。
    ④输入:0或多个输入。
    ⑤输出:1或多个输出。
  <2>好算法特质(4种):
    ①正确性:能正确解决问题。
    ②可读性:能让人好理解。
    ③健壮性:对非法数据有效反应。
    ④效率与低存储需求:执行快(时间复杂度低),不费内存(空间复杂度低)。
  <3>算法效率的度量:
    通过时间复杂度和空间复杂度来描述的。
PS:
数据结构:如何把现实世界的问题信息化,将信息存进计算机。同时还要实现对数据结构的基本操作。
算法:如何处理这些信息,以解决实际问题。

2.2时间复杂度

一个语句的频度:该语句在算法中被重复执行的次数。
  <1>:如何估算时间的开销?
    :写好后运行,再计时(事后统计)。
  存在的问题:
    ①与机器性能有关。
    ②与编程语言有关。
    ③与编译程序产生机器指令质量有关。
    ④无法事后估计(有不好影响)。
  <2>事前预估法(渐近时间复杂度):
    1>两条规则
      ①加法规则:保留最高阶的项。
      ②乘法规则:都保留。
    2>复杂度比较:常对幂指阶

O(1) < O( l o g 2 n log_2n log2n) < O(n) < O( n l o g 2 n nlog_2n nlog2n) < O( n 2 n^2 n2) < O( n 3 n^3 n3) < O( 2 n 2^n 2n) < O( n ! n! n!) < O( n n n^n nn)

    3>只需考虑最深层循环次数与n的关系
  <3>问:若循环次数n不确定呢?
    答:考虑:最好(一般不用)、最坏、平均复杂度。
    平均时间复杂度:输入等概率出现的情况下,算法期望运行时间。
PS:
  算法的性能问题只有在n很大时才会暴露出来。

while(i<=n){
	i=i*2;//设最深层语句频度为x。故语句执行2^x次。
	printf("Hello World %d\n",i);//即:2^x > n  ===>x=log_2n+1(循环条件最后还要执行1次)
}
2.3空间复杂度

  该算法所耗费的存储空间。
  一个程序在执行时所消耗的存储空间:
    (1)本身程序代码:大小固定,与问题规模无关。
    (2)变量等:只需关注存储空间大小与问题规模有关的变量。
    (3)函数递归调用(函数调用栈)。
  算法原地工作:算法所需的辅助空间为常量,即O(1)。

题总结:
1.循环队列:本事是用数据表(存储),表示的队列(逻辑)。

总结:

  数据结构主要是用来描述数据之间的关系对数据的运算,三元素:逻辑结构、存储结构、数据的运算。

逻辑结构:描述逻辑上数据之间可能存在着什么样的关系,如:集合(同属集合,别无关系)、线性结构(一对一的关系)、树(一对多的关系)、图(多对多的关系)。
====》线性与非线性

存储结构:描述真正的元素之间的存储关系,顺序存储(元素连在一起)、链式存储(元素离散分布)、索引存储(索引表)、散列存储(关键字计算)。
====》顺序与非顺序

数据的运算:运算的定义(逻辑结构,指出功能)、运算的实现(存储结构,指出具体操作步骤)

抽象数据类型,这是一种数据类型,即定义了一个数据结构:包含逻辑结构和运算的定义。但不包含具体的实现。

数据结构:要处理的信息。
算法:处理信息的步骤。
算法特性:1.有穷 2.确定 3. 可行 4.输入 5.输出
好算法特质: 1.正确 2.可读 3. 健壮 4.高效率,低存储

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值