C++学习---数据结构的基本概念

时间:2019-03-21
本文章向大家介绍C++学习---数据结构的基本概念,主要包括C++学习---数据结构的基本概念使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.数据结构的概念和术语

数据(Data):是对客观事物的符号表示,是指所有能够输入到计算机并被计算机处理的符号的总称;

2大类数据:数值数据(整数、浮点数、复数)与非数值数据(字符、字符串、图像、声音);

数据元素(Data Element):数据的基本单位,在程序中作为一个整体进行考虑和处理;

数据项:数据元素可以由多个数据项组成,是数据操作中不可分割的最小单位;

数据对象:是性质相同的所有元素的集合,是数据的一个子集;

数据结构:是相互之间存在一种或多种特定关系的数据元素组成的集合,这种关系被称为结构;

四类基本结构:集合(数据元素无序也没有重复)、线形结构(具有一对一的关系,所有元素按照某种次序排列在一个序列中,元素存在直接后继和直接前驱)、树形结构(集合中元素存在一对多的关系)、图状结构(网状结构)(集合中的元素存在多对多的关系)

直接后继与直接前驱:线形结构中仅有第一个元素没有直接前驱,仅有最后一个元素没有直接后继

逻辑结构:Data_Structure = (D, S)

物理结构(存储结构):数据结构在计算机中的表示,包括数据元素的表示和数据关系的表示

位、元素(节点)、数据域:位是数据在计算机中的二进制表示最小单位的一位位,若干位组合形成的一个位串来表示一个完整,又被称为一个节点,数据项对应为数据域;

映像、顺序映像和非顺序映像:元素节点是数据在计算机中的映像,其中借助元素在计算机存储中的相对位置表示数据的关系称为顺序映像,借助元素存储地址的指针来表示数据的关系称为非顺序映像。分别对应于顺序存储结构和链式存储结构。

数据结构研究的三个方面:数据间的固有关系(逻辑结构);数据在计算机内部的存储方法(存储结构);数据在不同结构上的操作与处理(算法)。

2.抽象数据类型

2.1数据类型

5种数据类型:基本类型、构造类型、指针类型pointer、引用类型reference、空类型void

4种基本类型:整型(短整型shaort int-2、整型int-4、长整型long int-4)、字符型char-1、浮点型(单精度型float-4、双精度型double-8、长双精度型long double-8)、布尔类型bool

5种构造类型:枚举类型enum、数组类型srray、结构体类型struct、联合类型union、类类型class

2.2数据抽象与抽象数据类型

抽象数据类型用户定义用来表示实际应用问题的数据模型

特点:使用与实现分离,实现封装和信息隐蔽

3.算法和算法分析

3.1算法

算法:是对特定问题求解步骤的一种描述,是指令的有限序列

五个特征:有穷性(有限的步骤与运行时间)、确定性(指令的无疑义)、可行性(可以通过有限次运算得到结果)、输入(0个或多个)、输出(一个或多个)

3.2算法设计的要求

正确性:不含语法错误;程序在输入数据后可以得到满意的结果;精心选择的、典型的、苛刻的数据输入可以得到满意的结果;一切合法的输入可以得到满意的结果

可读性:易于理解

健壮性:使对非法数据的处理也可以得到一定的结果

效率:时间和存储空间

3.3算法效率的度量

时间复杂度:程序在计算机上运行时间的度量;

2种方法:事后统计方法和事前分析估算方法;

事后统计方法的2个缺陷:一是必须提前运行程序,二是受到计算机硬件和软件因素影响;

事前分析估算方法的5个取决因素:问题规模;算法策略;程序编写的语言;编译产生机器代码的质量;机器执行指令的速度;

渐进时间复杂度:T(N) = O(F(N))

2种表示形式(对于随问题规模变化算法的时间复杂度计算):一种是平均算法时间复杂度,另一种是最坏情况时间复杂度(一般使用这个)

空间复杂度:算法运行使用存储空间的描述;

原地工作:算法使用的对输入数据和程序所占之外的额外空间为常数;

4.面向对象概述

4.1面向对象的思想

基本思想:尽可能运用人类的自然思维方式来建立问题空间的模型,构造尽可能直观、自然的表达方法求解问题的软件系统;

面向对象=对象+分类+继承+消息通信;

4.2面向对象的基本概念

对象:现实世界存在的具体事物,可以是有形物体,也可以是无形的事物或概念;

对象=数据+动作(方法、操作);

对象的2个内容:属性行为

对象的3个特征:一个区别于其他对象的名字;一组描述它属性的状态;一组决定其功能或行为的操作;

对象3个特性:模块的独立性、动态的连接性、易维护性;

消息:对象间交互过程所传递的通信信息;

3个性质:同一对象可以接收不同的消息;相同形式的消息可以发送给不同的对象产生不同的响应;消息发送时不考虑接收者,接受者可以响应消息也可以不响应;

消息序列:向同一个对象发送的多个信息或者一个对象向外发出多个消息;

共有消息:由外界对象向其发送的消息称为共有消息;

私有消息:由对象向其自身发送的消息;

3种类型(按功能划分):返回对象内部状态的消息;改变对象内部状态的消息;完成特定操作改变系统状态的消息;

类:具有相同属性和系统操作的对象集合的抽象;

实例:类所定义的一个具体对象;

模板:类可以看做是对象的模板,抽象地描述了属于该类的全部对象的属性和操作;

4.3面向对象的基本特征

封装性:将一段代码“包装”起来,应用时只知道这段代码所能完成的功能,而不必知道该段代码的具体实现细节;

3个条件:清楚的边界+预留的对外接口+良好的内部实现细节隐蔽性

继承性:子类可以自动拥有或共享父类的全部属性和方法;

4个优点:类间清晰的层次关系;自动的属性和方法共享,提高代码的复用性;减少接口,程序更加易于维护;具体功能的扩充,细节的完善;

多态性:同一个名字(函数或运算符)在不同场合具有不同的意义(重载);同一个界面有多重不同的实现(虚函数)。分别对应于编译时的多态性和运行时的多态性。

4.4面向对象程序设计

面对过程的程序设计:程序=数据结构+算法,数据结构与算法单独设计

面对对象的程序设计:对象=数据结构+算法,将数据结构和算法封装到对象内部

4.5面向对象的语言

早期:LISP语言,Simula67语言,SmallTal语言,逐渐引入面向对象的一些概念

C++,Java等等