数据结构概论
一、什么是数据结构?
简单来说,数据结构是计算机组织数据和存储数据的方式。更进一步地说,数据结构是指相互之间存在一种或多种特定关系的数据的组织方式和它们在计算机内的存储方式,以及定义在该组数据上的一组操作。
二、我们为什么要学习数据结构呢?
数据结构是计算机科学与技术专业、计算机信息管理与应用专业,电子商务等专业的基础课,是十分重要的核心课程。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。合理的数据结构可以降低程序设计的复杂性,提高程序设计的合理性,以提高程序的执行效率。
三、读完本篇文章你能学到什么?
本文的学习目标如下:
- 理解用计算机解决问题的具体步骤以及数据结构的含义以及作用。
- 理解数据、数据元素、数据项等基本术语。
- 掌握数据的逻辑结构、存储结构以及其运算的基本概念。
- 知道常见的数据组织结构有哪四种。(不是只有四种)
- 知道常见的数据存储结构有哪两种。(不是只有两种)
- 理解算法和算法分析的相关概念以及方法。
本篇文章将对上述问题简单陈述
- 计算机解决一个具体问题时的常用步骤
计算机解决一个具体问题时,一般经过以下步骤:
- 从具体问题抽象成数学问题
- 建立数学模型,设计恰当算法
- 用计算机语言编写时间该程序的算法,调试和运行直至最终得到问题的解答
在每个步骤数据的形式都不相同,具体问题的数据我们称为原始数据。在数学模型中,需要将原始数据按照某种方式组织起来,以便组织数据元素之间的关系,这就是逻辑结构。最后将逻辑结构转换成计算机存储结构。
你们可能有见过一个公式:算法+数据结构=程序
这是1976年瑞士计算机科学家尼克劳斯-维尔特曾提出的著名公式。这个公式间接的描述了算法、数据结构和程序之间的关系。
五、数据、数据元素和数据项
数据:所有被计算机处理和存储的对象。
数据元素:数据的基本单位,程序中作为一个整体进行考虑和处理。数据元素是运算的基本单位,通常具有完整的实际意义。
数据项:一般情况下数据元素由数据项组成。数据项又称为字段或域。它是数据中不可再分的最小单位。
学号 | 姓名 | 性别 | 年龄 |
1001 | 小白 | 女 | 17 |
1002 | 小刚 | 男 | 16 |
1003 | 小红 | 女 | 17 |
1004 | 小紫 | 女 | 17 |
1005 | 小叶 | 女 | 16 |
我们看这个表格,数据元素在这个表格中指的是每一行,“学号—姓名—性别—年龄”,本表格的第一个数据元素是“1001—小白—女—17”。在c语言中我们通常用结构体来组织数据元素。
本表格中,数据项每一个字段就是一个数据项如,“1001”、“小白”、“女”、“17”。这些都是数据项。在结构体中各个结构体变量就是数据项。
六、数据的逻辑结构
数据的逻辑结构是指数据之间的逻辑关系。所谓关系就是指数据元素之间的关联方式或者邻接关系。有如下四种基本逻辑结构。
- 集合
除同处一个集合外,没有任何关系。集合中任意两个数据元素没有任何关系,组织形式松散。
- 线性结构
数据元素按照逻辑关系一次排列形成一条“链”,数据元素之间一个一个一次相连。
- 树形结构
树形结构具有分支、层次特性,其形态像自然界中的树因此得名,上层的数据元素可以和下层的多个数据元素相连,但下层的数据元素只能和上层的一个数据元素相连。
- 图结构
任意两个数据元素都可以有关系。
- 数据的存储结构
数据的逻辑结构在计算机实现称为数据的存储结构(或物理结构)。一般情况下包括两部分:
- 存储数据元素
- 数据元素之间的关联方式
数据的存储结构主要有两种:顺序存储方式和链式存储方式。
顺序存储方式是指所有数据元素放在一段连续的内存空间中。
链式存储方式包括两个部分数据域和指针域,所有数据元素可以放在不是连续的内存空间中,每一个数据元素有一个指针域指向下一个数据元素(除最后一个数据元素)。
除了这两种方式,还有索引存储方式和散列存储方式。
相应的存储结构称为给定逻辑结构的存储实现或者存储映像。
- 算法及其特性
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
算法有以下特性:
- 正确性
能够正确的实现预定功能,满足于具体问题的需求。
- 易读性
易于阅读、理解和交流,便于调试和修改。
- 健壮性
即是输入非法数据也能做出相应处理,不至于产生不可预料的输出。
- 有穷性
在有效时间内可以执行完所有语句。
算法的时间复杂度:算法的时间复杂度是指执行算法所需要的计算工作量。通常情况下一个算法的时间复杂度是算法输入规模的函数。
算法的空间复杂度:算法的空间的空间复杂度主要是程序运行所需要的额外空间。
- 思考与练习
- 与数据本身的形式、内存、相对位置、个数无关的是数据的()。
- A.存储结构 B.逻辑结构 C.类型 D.运算实现
- 算法的时间复杂度是指()。
- A.一个算法的确切执行时间
- B.一个程序的确切执行时间
- C.算法在给定输入下的计算量
- D.算法在给定时间下的计算量
- 算法的空间复杂度是指()。
- A.算法本身所占用的存储空间的大小
- B.算法中输入数据所占用的存储空间的大小
- C.算法所占用的所有存储空间的大小
- D.算法中除输入数据占用的存储空间之外所需的额外存储空间的大小
- 什么是数据、数据元素以及数据项?它们有何区别?
- 什么是数据的逻辑结构?什么是数据的存储结构?
- 数据的逻辑结构和数据的存储结构有什么关系?
- 常见的数据逻辑结构和数据存储结构?
- 设计一个1-100累加的程序并使用大O记法分析它的时间复杂度。
答案:BCD
参考:
- 大O记法
- 徐卓群,数据结构与算法
- 王晓东,计算机算法设计与分析