读书笔记 |《数据结构》 之什么是数据结构(一)

刚好最近又找出大二修的数据结构的书,就想着把读书笔记po上来。

数据结构是什么

数据结构+算法=程序

过程解析:发现问题,分析问题并抽象出具体的数据模型(待处理的数据以及数据之间的关系,即数据结构);设计算法,其中包括完成数据表示(将数据以及数据之间的关系存储到计算机的内存中)和数据处理(具体的操作步骤,将问题求解的基本思路行程算法);编写程序,将算法的操作步骤转换为某种程序设计语言对应的语句(就是用某种程序设计语言描述数据处理的过程)。


数据结构应用在哪里

栗子1:线性表的数据结构


学籍管理问题:计算机的操作对象是每个学生的学籍信息,各项之间的关系可以用线性表的数据结构来描述。

栗子2:树的数据结构


人机对弈问题:人机对弈主要是对弈的策略实现已存入计算机,计算机的操作对象是对弈过程中可能出现的棋盘状态(格局),而格局之间的关系是由对弈规则决定的,所以格局之间的关系可以用树的数据结构来描述。

栗子3:图的数据结构


教学计划编排问题:有些课程之间要按照规定的先后次序进行,计算机的操作对象是课程,课程之间的次序关系可以用图的数据结构来描述。从定点Ci到顶线Cj之间存在边< Ci,Cj >,则表示课程Ci是课程Cj的先修课。


数据结构的基本概念

数据结构


数据是信息的载体。数据是计算机程序处理的“原料”,eg:学籍管理程序处理的数据就是上图的学籍登记表
数据元素是数据的基本单位。eg:图中每个学生的档案就是一个数据元素。
数据项是构成数据元素的不可分割的最小单位。eg:档案中的学号、姓名等。

数据结构是指相互之间存在一定关系的数据元素的集合。数据元素是讨论数据结构时涉及的最小数据单位。数据结构分为逻辑结构和存储结构。
数据的逻辑结构是指数据元素之间逻辑关系的整体。数据结构在形式上可定义为一个二元组:
Data_Structure={D,R}
D:数据元素的有限集合
R:R是D上的关系集合
根据数据元素之间逻辑关系的不同,数据结构分为以下四类:


(a)集合:数据元素之间就是“属于同一个集合”,除此之外,没有任何关系。
(b)线性结构:数据元素之间存在着一对一的线性关系。
(c)树结构:数据元素之间存在着一对多的层次关系。
(d)图结构:数据元素之间存在着多对多的任意关系。

数据的存储结构又称物理结构,是数据及其逻辑结构在计算机中的表示,也就是说,存储结构除了存储数据元素之外,必须隐式或显式地存储数据元素之间的逻辑关系。通常有两种存储结构:顺序存储结构和链式存储结构。


顺序存储:元素之间的逻辑关系由元素的存储位置来表示。
链式存储:元素之间的逻辑关系用指针来表示。

为了区别,通常将数据的逻辑结构称为数据结构。
数据的逻辑结构和存储结构密切相关。一种数据的逻辑结构可以用多种存储结构来存储,而采用不同的存储结构,其数据处理的效率往往是不同的。

抽象数据类型

数据类型是一组值的集合以及定义于这个值集上的一组操作的总称,规定了该类型数据的取值范围和对这些数据采取的操作。
抽象:抽出问题本质的特征而忽略非本质的细节。eg:程序语言将能完成某种功能并可重复执行的一段程序抽象为函数,在需要执行这种功能时调用这个函数,将“做什么”和“怎么做”分离开,实现了算法细节和数据内部结构的隐藏。
抽象数据类型(ADT)是一个数据结构以及定义在该结构上的一组操作的总称,可理解为对数据类型的进一步抽象。

数据类型ADT
高级程序设计语言支持的基本数据类型自定义的数据类型

在设计ADT时,把ADT的定义和实现分开来。定义部分包含数据的逻辑结构和允许的操作集合。ADT的使用者依据这些定义来使用ADT,ADT的实现者依据这些定义来完成该ADT各种操作的具体实现。

ADT提供了定义和实现的不同视图,实现了封装和信息隐藏。eg:整数的数学概念和施加到整数的运算构成一个ADT,C++的语音int型是对这个ADT的物理实现,各个程序设计语言都提供了整数类型,尽管它们在不同的编译器上实现的方法,但由于其ADT相同,在用户看来都是相同的。

ADT的定义包含以下内容:

ADT 抽象数据类型名
Data
    数据元素之间逻辑关系的定义
Operation
    操作1
            前置条件:执行此操作前数据所必需的状态
            输入:执行此操作所需要的输入
            功能:该操作将完成的功能
            输出:执行该操作后产生的输出
            后置条件:执行该操作后数据的状态
    操作2
        ······
    ······
    操作n
        ······
endADT

算法是什么

算法及其描述方法

算法是对特定问题求解步骤的一种描述,是指令的有限序列。算法满足的五特性:>=0个输入,>=1个输出,有穷性,确定性,可行性。“好”算法除了满足以上五特性还满足以下五特性:正确性,鲁棒性,简单性,抽象分级,高效性。
算法的描述方法:自然语言,流程图,程序设计语言,伪代码。

算法分析

算法的时间复杂度:为了客观地反应一个算法的执行时间,可以用算法中的基本语句的执行次数来度量算法的工作量。这种衡量效率的方法得出的不是时间量,而是一种增长趋势的度量,只考察当问题规模充分大时,算法中基本语句的执行次数在渐进意义下的阶,称为算法的渐进时间复杂度,是一个估算值,通常用大O表示。
定义:若存在两个正的常数c和n0,对于任意n>=n0,都有T(n)<=c*f(n),择称T(n)=O(f(n))。

栗子1:++x;
解:++x;是基本语句,执行次数为1,时间复杂度为O(1)

栗子2:for( i= 1;i<=n;++i)++x;
++x;是基本语句,执行次数为n,时间复杂度为O(n)

算法的空间复杂度:在算法的执行过程中,需要的辅助空间数量。
记作:S(n)=O(f(n))
n为问题规模

参考文献:
〔1〕王红梅,胡明,王涛 . 数据结构(C++版)(第2版)[M] . 清华大学出版社 . 2011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值