第一章数据结构

来源:互联网 发布:skype6.3 for mac中文 编辑:程序博客网 时间:2024/05/29 11:04
程序 = 数据结构 + 算法

基本概念和术语

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。不仅包括整型、实型等数值类型,还包括字符以及声音、图像、视频等非数值类型。

数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。

数据项:一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。虽然数据项是数据的最小单位,但真正讨论问题时,数据元素才是数据结构中建立数据模型的着眼点。

数据对象:是性质相同的数据元素的集合,是数据的子集。在不产生混淆的的情况下,我们都将数据对象简称为数据。

数据结构:是相互之间存在的一种或多种特定关系的数据元素的集合。

 

按照不同的视点,将数据结构分为逻辑结构和物理结构。

逻辑结构:是指数据对象中数据元素之间的相互关系。逻辑结构分为以下四种:

A、        集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。

B、        线性结构:线性结构中的数据元素之间是一对一的关系(个人感觉就是链表那种关系)。

C、        树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。

D、        图形结构:图形结构的数据元素是多对多的关系。

总结:逻辑结构是针对具体问题的,是为了解决某个问题,在对问题理解的基础上,选择一个合适的数据结构表示数据元素之间的逻辑关系。(个人感觉,对c语言来说,就是你把这个程序的问题搞清楚了,然后就该想想怎么定义程序所需要的数据结构,例如数组,例如更复杂点的结构体等等)。

物理结构:是指数据的逻辑结构在计算机中的存储形式。数据的存储结构应正确反映数据元素之间的逻辑关系。如何存储数据元素之间的逻辑关系,才是实现物理结构的重点和难点。(比如,你觉得选用哪种存储形式更适合你的数据或者操作)

数据元素的存储结构形式有两种:

A、        顺序存储:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系一般是一致的。(例如数组)

B、        链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。(例如链表)

总结:逻辑结构是面向问题的,而物理结构是面向计算机的,基本的目标就是将数据及其逻辑关系存储到计算机的内存中。

 

(接下来就是抽象数据类型了,在大学课程学习数据结构的时候,还没有接触过面向对象的语言,也没有面向对象的概念,对于“抽象”这个概念只是停留在字面意思,这次再看到这里,又领会到了一些新的东西。)

数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。数据类型是按照值的不同来进行划分的。

在c语言中,按照取值的不同,数据类型可以分为两类:

原子类型:是不可以再分解的基本类型,包括整型、实型、字符型等。

结构类型:由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干整型数据组成的。

 

抽象是指抽取出事物具有的普遍性的本质。它是抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括。抽象是一种思考问题的方式,它隐藏了繁杂的细节,只保留实现目标所必需的信息。抽象的意义在于数据类型的数学抽象特性。

 

抽象数据类型:是指一个数学模型及定义在该模型上的一组操作。抽象数据类型不仅仅指那些已经定义并实现的数据类型,还可以是编程者在设计软件程序时自己定义的数据类型。

 

一个抽象数据类型定义了:一个数据对象、数据对象中各数据元素之间的关系及对数据元素的操作。

抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来。

 

(自此第一章就结束了,看完这里,对面向对象尤其是抽象这个概念加深了理解,之前在用c++编程时,对于抽象这个过程,总是觉得无从下手,不知道如何去抽象,怎么抽象,要把什么抽象出来,看完这里不敢说自己就会抽象了,最少知道什么是抽象,要抽象出什么东西来,不过能力的提升还是应该在编码的过程中提高的,个人建议如果想要练习,对于初学者来说,可以做一下c++  primer中的练习题。)

0 0
原创粉丝点击