第一章 数据结构概述

基本概念

数据、数据元素、数据对象

  • 数据客观事物符号表示,是对现实世界的事物采用计算机能够识别、存储和处理的形式进行描述的符号的集合
  • 数据元素:数据的基本单位,通常是作为一个整体进行处理。一个数据元素又由若干数据项组成
  • 数据项:包括初等项组合项两种。
    初等项:数据不可分割的最小单位
    组合项:由若干数据项组成
  • 数据对象性质相同数据元素的集合,是数据集合的一个子集。 数据元素则是数据对象集合中的成员。

例:

学生情况表
学号姓名性别年龄籍贯班级号成绩
数学物理化学外语
6001张三19北京1582859092
6002李四20上海1590929195
6003王武18湖南1593959194
……………………………………………………
  • 在这个表格中,除去行头的每一行都是一个数据元素,代表每个学生的情况
  • 每一个数据元素由多个数据项组成。学号、姓名、性别、年龄、籍贯、班级号为初等项,成绩为组合项,而其中的数学、物理、化学、外语又为初等项。
  • 这整个表格就是一个数据对象。
  • 等级关系:数据对象 > 数据元素 > 组合项 > 初等项

数据结构

  • 结构:在任何数据对象之间,数据元素都不是独立存在的,它们互相之间存在一种或多种特定的关系,这种关系称之为结构。
  • 数据结构:数据的组织形式,由数据对象及该对象中数据元素之间的关系组成。
    Data Structure =(Data,Relation)
数据结构数据的逻辑关系数据元素以及数据元素之间的逻辑关系
数据的存储结构(物理结构)数据元素以及数据元素之间的关系在计算机中的存储表示
数据的运算对数据施加的操作

数据结构的分类

  • 结点:每一个数据元素都可以成为一个结点,数据结构中所包含的数据元素之间的关系就是结点之间的关系。
    1)这种关系可以用有序对< k , k’ >来表示。
    2)k和k’表示的是两个相邻结点,其中k是k’的前趋,k’是k的后继
结点类型定义
开始结点没有前趋但有后继的结点
中间结点既有前趋又有后继的结点
终端结点有前趋但是没有后继的结点
  • 数据的逻辑结构线性结构非线性结构
逻辑结构特点
线性结构仅有一个开始结点和一个终端结点,并且所有结点最多只有一个前趋和一个后继
非线性结构一个结点可能有多个前驱和后继
  • 存储结构:数据的存储结构取决于四种基本的存储方法:顺序存储链接存储索引存储散列存储
存储方法特点
顺序存储 1. 逻辑上相邻的结点存储在物理位置相邻的存储单元;
2. 结点之间的逻辑关系用存储单元的邻接关系来表示;
3. 主要用于线性结构,程序语言中通常使用数组描述
链接存储 1. 不要求在存储的物理位置上亦相邻,结点之间的关系由附加指针表示;
2. 链接存储可以用于线性结构,但是更加常用于非线性结构;
3. 通常链接存储使用程序语言的指针描述的
索引存储 1.在存储结点数据的同时,还建立附加的索引表;
2.关键字是结点的一个字段或者多个字段的组合,其值能唯一确定数据结构中的一个结点;
3.一般情况下,索引由关键字和地址组成;
4.一个索引唯一对应于一个结点。其中的关键字是唯一表示该结点的数据项,地址指示该结点的存储位置。
散列存储 根据关键字计算出该结点的存储地址,然后按存储地址存放该关键字对应数据元素

数据类型

基本数据类型、组合类型

  • 数据类型:一组性质相同的值的集合以及定义在这个集合上的一组操作的总称。
    1)基本类型:如实型、整型、字符型等,其取值范围和允许的操作都是由系统预先规定的;通常是由程序语言直接提供。
    2)组合类型:它由一些基本类型组合构造而成,如记录、数组、结构等;由用户借助程序语言提供的描述机制自己定义的。

抽象数据类型

  • 抽象:从特定的实例中抽取共同的性质以形成一般概念化的过程,是对某系统的简化描述,即强调该系统中的某些特性,而忽略一部分细节。对系统进行的抽象描述称为对它的规范说明,对抽象的解释称为它的实现。
  • 数据抽象:一种对数据和操作数据的算法的抽象。数据抽象包括模块化信息隐藏两种抽象。
    1)模块化:讲一个复杂的系统分解为若干个模块,每个模块与系统的某个特定的模块有关的信息保持在该模块内。其优点是便于修改或维护。
    2)信息隐藏:家送一个模块的细节部分对用户隐藏起来,用户只能通过一个受保护的接口来访问某个模块,而不能直接访问一个模块的内部细节。其优点是:错误的影响被限制在一个模块内,增强了系统的可靠性与可维护性。
  • 抽象数据类型:抽象数据的组织和与之相关的操作。抽象数据类型通常是由用户定义,用以表示应用问题的数据模型,它可以看作是数据的逻辑结构和定义在逻辑结构上的操作

算法和算法分析

算法的概念

  • 算法:一个有穷指令集,这些指令为了解决某一特定任务规定了一个运算系列。
  • 算法的特性:
特性定义
输入一个算法必须具备一个或者多个输入。
包括使用输入语句由外部提供和使用置初值语句或赋值语句在内部给定
输出一个算法应具有一个或者多个输出
确定性算法的每一步都应确切地、无歧义地定义。
有穷性一个算法无论在什么情况下都应该在执行有穷步之后结束。
可行性算法中的每一个运算都应是能够运行的,即都可以通过已经实现的基本操作执行有限次完成

算法分析

  • 一个好的算法应该满足:
要求定义
正确性算法应该满足具体问题的需求,正确反映求解问题对输入输出和加工处理等方面的要求
可读性算法出来用于编制程序在计算机上执行之外,另外一个重要的用处便是阅读和交流。可读性有助于人们对算法的理解,便于算法的交流与推广。
健壮性当输入非法数据时。算法应能适当地做出反应或进行处理,输出表示错误性质的信息并终止执行。
时间效率和存储占用量一般来说,求解同一个问题有若干中算法时,则执行时间短的算法效率高,占用存储空间少的算法的较好。但是算法是时间开销和空间开销往往是相互之约的,对高时间效率和低存储量的要求只能根据问题性质折中处理。

对算法在计算机上执行所耗费的时间所占空间的分析,常常是人们对算法进行评估和选择的最重要的依据。

  • 时间复杂度:
    1)问题规模:一般将求解问题的输入量作为问题的规模,并用一个整数 n 来表示。
    2)时间复杂度(T(n)):算法的时间耗费,记为T(n)=f(n),其中f(n)是该算法所求解问题规模 n 的函数。
    3)算法的渐进时间复杂度:当问题规模n趋近于无穷大时,把时间复杂度的数量级称为算法的渐进时间复杂度。
    4)算法的耗费时间:算法中各个语句执行时间的总和,而每个算法的执行时间应该是该语句执行一次的时间与执行的次数之积。
    5)若不特别说明,所讨论的时间复杂度均指最坏时间复杂度
    6)在评价一个算法的优劣时,更多的是采用渐进时间复杂度。

  • 空间复杂度:以空间复杂度作为算法所需存储空间的耗费,记为S(n)=O(f(n)),其中n为问题规模,f(n)作为算法所处理数据所需的存储空间算法操作所需的辅助空间之和。在进行算法分析时,一般只讨论算法的时间效率,偶尔涉及算法的存储量需求时,主要考虑的也只是算法运行时所需要的辅助空间的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值