概述


写在前面的话


1.编程过程中,数据结构和数据库的作用

1.1数据结构

数据结构,是指一堆具有相同特定关系的数据元素的集合和加诸在其上的一系列操作。 
每种数据结构都规定了一种特定的关系,即元素之间的关联性。 
每种数据结构都规定了一系列对该数据结构下针对数据元素间关系的特定操作,这些操作具有针对性,特殊性。

1.2数据库

数据库,数据的仓库,是按照特定的格式,以整体的方式持久化存储数据的。在其上附加管理工具后,处理数据将会更加的方便。

1.3二者的区别与联系

相同点:二者都限定了数据的类型(或格式),二者都设定了一些加诸在数据上的操作。  不同点:数据库侧重于存储,而且是存储整块的数据项,数据元素宽度更大。数据结构的侧重于逻辑关系,主要是限定元素间的关系和一些针对特定数据的操作。   

2.经典数据结构的应用

2.1线性表

元素之间是一对一的关系,其主要操作就是增删查改

(1)顺序表

数据元素的物理存储是按顺序的,元素间的地址是连续的,可以根据每个元素的下标来随机访问数据。

顺序表在编程的过程中用到的最多,操作的时候比较灵活,常用来查找数据和暂时存储数据。

(2)链表

元素的物理存储是随机的,元素间的联系靠内部的指针来指定,每一个数据元素内部不仅存储数据,而且还存储指向下一个元素的指针。相比于顺序表,其存储效率不高。

线性表常用在存储数据元素个数未定、内部元素的物理地址不连续的情况下。

(3)栈

只能在一端插入和删除的特殊线性表,其特点是先进后出,其功能类似于一个水杯。

栈的应用比较多,如函数调用、大数相加分隔符匹配算术表达式求值汉诺塔问题等等。

(4)队列

只能在一端进行插入,另一端进行删除的线性表,其特点是先进先出,功能可以比作一个管道。

队列的应用也不少,如循环顺序队列优先级队列等等

(5)串

所谓串,“字符串”也,即字符串在一起作为一个整体,当然串也是线性表的一种,当然也有顺序存储,链式存储两种。

串的应用也不少,多为字符串匹配问题,字符串定位问题,公共子序列问题等等

(6)数组

一些类型相同的数据的组合

数组的应用是最多的,大部分时候是习惯性的采用数组来存储数据,数组的操作太多了,此处不做一一列举。 
一些图形学方面的特殊的应用有:矩阵的压缩与还原稀疏矩阵三元组存储稀疏矩阵十字链表存储等等


2.2树

是一种特殊的元素间一对多的具有层次的结构,特点是:一个元素可以有多个后继,数据分层等

应用也比较多,如查找常用二叉树或者平衡树、哈夫曼编码、解决问题的最优树、决策树等等。

2.3图

是一种元素间多对多的较为复杂的结构,其节点和边在很多情况下有不同的含义。

其应用也较为广泛,如搜索、遍历、最优化问题、复杂关系分析等等


好的~小伙伴们,在了解完上述所说的数据结构的大概情况之后,现在我们详细的去理解我们的第一章内容——概述。其主要分两个内容,分别为:数据结构和算法。

 

1.数据结构的结构概念:数据结构其实就是数据的逻辑结构,数据的存储结构和数据的操作(算法)

注意:算法的设计取决于数据的逻辑结构,算法的实现概念
取决于数据的物理存储结构。

 

2.数据结构的基本术语
a. 数据(Data)

  数据即信息的载体,是对客观事物的 “符号表示” ,指能输入到计算机中并被计算机程序处理的符号的总称。
(如整数,实数,字符,文字,声音,图形,图像等都是数据。)

  b. 数据元素(Data Element)

  数据元素是数据的 “基本单位” ,通常作为一个整体进行考虑和处理。
数据元素一般由一个或多个数据项(是数据记录中最基本的、不可分的有名数据单位)组成,一个数据元素包含多个数据项时,常称为记录,结点等。
数据项也称为域,字段,属性,表目,顶点。

  c. 数据对象(Data Object)

  数据对象是具有相同特征的数据元素的 “集合”,是数据的一个子集。

 

3.数据的逻辑结构  


a.概念:数据结构简称 DS,是数据元素 “组织形式” ,或数据元素相互之间存在一种或多种特定关系的集合。
任何数据都不是彼此孤立的,通常把相关联的数据按照一定的逻辑关系组织起来,按照计算机语言的语法,
语义的规定相应的存储结构或形式,并且为这些数据指定一组去处操作,这样就形成了一个数据结构。

  b.种类:线性关系,树结构和图。
注意:树结构和图又被称为非线性结构

  

  
4. 数据的存储结构(PhysicalStructure)

   f1.数据的存储结构:数据的存储结构是数据的逻辑结构在计算机内存中的存储方式,又称物理结构。
f2.数据存储机构的实现: 用计算机语言来实现,因而是依赖于具体的计算机语言。
f3.存储结构的方式:1.顺序存储结构: 元素在内存中的物理存储顺序与他们的逻辑次序相同,就是有逻辑的数据元素依次排列。
注意:通常这种结构是使用数组实现的。

2.链式存储结构:由于逻辑上相邻的元素在物理上不一定相邻,于是加入了指针这一个条件来使得有逻辑的元素形成一条链式,链式中的元素为一个结点,
结点由数据域和地址域组成,通过地址域把相互直接关联的结点链接起来,形成一条有逻辑的链式链。

  f4:顺序基础上延伸出的存储结构:
1.索引存储:索引存储就是在数据文件的基础上增加了一个索引表文件。通过索引表建立索引,可以把一个顺序表分成几个顺序子表,其目的是在查询时查找效率,
避免盲目查找。
2.散列存储:散列存储就是通过数据元素与存储地址之间建立起某种映射关系,使每个数据元素与每一个存储地址之间尽量达到一一对应的目的。
这样,查找时同样可以大大提高效率。

  

  

5.类型,数据类型,抽象数据类型的概念  
类型:就是具有相同逻辑意义的一组值的“集合”。
数据类型:就是指一个类型和定义在这个类型上的操作集合。数据类型定义了“数据的性质”,“取值范围”以及“对数据所能进行的各种操作”。
抽象数据类型:就是指一个数学模型以及定义在该模型上的一组操作。
注意:抽象数据类型可分“数据抽象”和“抽象数据类型的声明”
数据抽象:就是指讲一个类型上的数据以及操作的逻辑含义与具体实现分离。
抽象数据类型的声明:抽象数据类型的规范描述包括ADT名称,数据描述和操作描述,操作描述包括操作名,初始条件和操作结构。

 

6.什么是算法?
一个算法是一个有穷规则的集合,其“规则”确定一个解决某一特定类型问题的操作
序列。

规则的特征:
a:有穷性。(步骤有限,每步多能在限定时间内完成)
b:确定性。(算法都有确切的规定,且任何条件下,算法只有一条路径)
c:可行性。(每部步骤都要确定可行)
d:有输入。(输入数据,算法加工对象)
e:有输出。(通过算法将输入数据加工得到的数据(输入和输出的确定关系为算法的功能),
算法有一个或多个数据。)
注意:有穷性和可行性是算法最重要的两个特征。

7.算法设计目标。
a.正确性:算法应该确切的满足应用问题的需求。
b.健壮性:即使输入数据不合适,算法也能做出适当的处理,不会导致不可控的结果。
c.高时间效率:算法的执行时间越短,时间效率越高。
d.高空间效率:算法执行时占用的存储空间越少,空间效率越高。
e.可读性:算法表达思路清晰,简洁明了,易于理解。

8.算法描述
a自然语言
b伪代码(常用)

9.算法与数据结构
a.算法建立在数据结构之上,对数据结构的操作需要用算法来描述。
b.算法设计依赖于数据的逻辑结构,算法实现依赖于数据的存储结构。

注意:在实现一种抽象数据类型,需要选择合适的存储结构,如何选?
1操作时间段 2占用空间短 两方面综合考虑

10.顺序表插入操作和单链表的插入操作
顺序表的插入操作:从后面一个一个往后挪,需要挪很多次,效率不高。
单链表的插入操作:只需要改前序元素的指针和后续元续的地址域。效率高。
所以一般插入操作最好使用链表结构。

11.算法的复杂度
a.算法的时间复杂度:指执行算法执行时间的增长率而非绝对时间。
说明:我们常把基本操作的执行次数之和作为估计算法时间复杂度的依据,
其可表示算法本身的时间效率。

b.算法的空间复杂度:指的是辅助变量所占用的存储空间。
说明:执行一个算法所需要的存储空间包括三部分,1.输入数据占用的存储空间
2.程序指令占用的存储空间 3.辅助变量占用的存储空间。

(注意:输入数据和程序指令所占用的存储空间与算法无关,因此,辅助变量
占用的存储空间就成为度量算法空间代价的依据。
比如:交换两个变量i,j算法,除了程序指令和i,j本身占用的存储空间外,为了
实现交换操作,还必须声明一个临时变量temp,这个temp变量所占用的一个
存储单元就是交换变量算法的空间复杂度O(l))

 

总结:

数据结构其实就是数据的逻辑结构,存储结构,算法组成。逻辑结构指的是数据之间的逻辑关系。存储结构有线性存储结构和非线性存储结构,其统一规律就是如果是顺序存储结构表格,那么其成员变量必须有一个数组(容器),一个顺序表长度值,其构造函数来去形成表格,然后在成员方法里面实现算法。如果是链式表格,那么必须有一个头结点,其构造函数去形成表格,然后在成员方法里面实现算法。

posted @ 2017-06-21 21:03  鹏达君  阅读(159)  评论(0编辑  收藏  举报