第5章〓数 据 思 维在我们生活的世界中,万事万物每天都在不断发生变化,而这种事物的变化即对应我们获得的信息,这些信息往往需要通过数据作为载体,将它们记录下来,然后利用计算机将数据通过二进制编码进行存储和处理。那么这些数据是如何在计算机中进行存储的? 本章首先讲述数据结构,数据在计算机中通常包含哪些类型的存储方式;接着分析如何将客观事物抽象成信息世界的实体,如何用概念模型来表示实体及其之间的联系;最后介绍大数据的概念及其应用、数据挖掘的概念及其应用。 5.1导学 本章结构导图如图50所示。 图50第5章结构导图5.2数据的表示5.2.1数据结构对数据进行处理时,需要将大量数据存放在计算机内,那么大量数据在计算机内是如何存储的呢?下面首先来介绍什么是数据结构。 计算思维导论第5章数据思维1. 数据结构的基本概念 数据结构是计算机存储、组织数据的方式,是相互之间存在一种或多种特定关系的数据元素的集合。数据结构主要研究以下3个方面的内容。 (1) 数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构。 (2) 对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构。 (3) 对各种数据结构进行的运算。 2. 逻辑结构和存储结构 数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合中的若干关系来表示。数据的逻辑结构有两个要素: 一是数据元素的集合,通常记为 D;二是 D上的关系,它反映了数据元素之间的前后件关系,通常记为R。一个数据结构可以表示成B=(D,R),其中,B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。 例如,如果把一年四季看作一个数据结构,则可表示成B=(D,R)。其中, D={春季,夏季,秋季,冬季} R={(春季,夏季),(夏季,秋季),(秋季,冬季)} 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称为数据的物理结构)。 由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此,为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系),在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链式等存储结构。 顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,节点之间的关系由存储单元的邻接关系来体现。如线性表(K1,K2,…,K10),假定每个节点占一个存储单元,K1放在10号单元中,则顺序存储的实现如图51(a)所示。链式存储结构就是在每个节点中至少包含一个指针域,用指针来体现数据元素之间逻辑上的联系,如图51(b)所示。 图51线性表 3. 线性结构与非线性结构 根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型: 线性结构与非线性结构。 线性结构满足: ①有且仅有一个根节点; ②每一个节点最多有一个直接前趋节点,也最多有一个直接后继节点; ③在一个线性结构中插入或删除任何一个节点后,还是线性结构。线性结构元素之间是一对一的联系。典型的线性结构有线性表、栈、队列、字符串等。 如果一个数据结构不是线性结构,则称之为非线性结构。数组、广义表、树和图等数据结构都是非线性结构。 5.2.2线性表1. 线性表的概念线性表是由n(n>=0)个数据元素组成的一个有限序列,如图52所示,表中的每一个数据元素,除了第一个(首元素)外,有且只有一个前趋,除了最后一个(尾元素)外,有且仅有一个后继。即线性表或是一个空表,或可表示为(a1,a2,…,ai,…,an),其中,ai是性质相同的数据元素,也称为线性表中的一个节点。线性表的长度,即表中的元素个数n,当n=0时称为空表。例如,英文字母表就是一个长度为26的线性表。 图52线性表2. 线性表的顺序存储结构(顺序表) 线性表的顺序存储结构的基本特点如下。 (1) 线性表中所有元素所占的存储空间是连续的(一般用数组实现)。 (2) 线性表中每个元素在存储空间中是按逻辑顺序存放的,即用物理上的相邻关系来体现逻辑上的相邻关系。 线性表的随机存取地址计算公式为:ADD(ai)=ADD(a1)+(i-1)×k这里ADD(ai)是第i个元素的地址,k是每个元素占用空间字节数。 如在顺序表中存储数据(20,34,52,43,74,30),每个数据元素占2个存储单元,第1个数据元素的存储地址是30,则第4个数据元素43的存储地址是36。 3. 线性表的插入运算 在长度为n的线性表(a1,a2,…,ai,…,an)的第i 个元素ai之前插入一个新元素x后得到的长度为n+1的线性表为(a1,a2,…,x,ai,…,an)。 实现方法: 要在第i(1≤i≤n)个元素之前插入一个新元素x,首先要从最后一个(即第n 个)元素开始,直到第i个元素之间的n-i+1个元素依次向后移动一个位置,移动结束后,在第i个位置写入新元素x。插入结束后,表长度增加1。 插入操作算法的时间复杂度分析: 如果插入的位置在第n个元素之前,则只需将第n个元素后移,这是最好的情况;如果插入的位置在第1个元素之前,则n个元素都要后移,这是最坏的情况;在等概率情况下(即在任何位置插入的概率相同)平均移动元素个数为n/2。 4. 线性表的删除运算 在长度为n的线性表(a1,a2,…,ai,…,an)中删除第i个元素ai后,变为长度为n-1的线性表(a1,a2,…,ai-1,ai+1…,an)。 实现方法: 要删除第i(1≤i