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等等
- MySQL中的binlog和redo浅析(r12笔记第5天)
- WordPress发布/更新文章、提交/审核评论自动清理腾讯云CDN缓存
- 使用sysbench压力测试MySQL(一)(r11笔记第3天)
- 分享一下php7和其他php多版本共存的配置教程
- 使用sysbench压力测试MySQL(二)
- 使用sysbench压力测试MySQL(三)(r12笔记第6天)
- 解决IE响应式的解决方案css3-mediaqueries.js不生效问题
- MySQL传输表空间小结(r12笔记第2天)
- swingbench压测Oracle小记(r12笔记第20天)
- 分享最近对网站外链跳转页面代码的一些改善
- swingbench压测Oracle小记(r12笔记第19天)
- Oracle闪回原理测试(三)(r12笔记第16天)
- 利用JS生成二维码图片,优化WEB性能及页面加载速度
- Go语言的指针 & *
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 设计模式实战-桥接模式,想做月老吗?
- 设计模式实战-原型模式,我们就来依法炮制
- 设计模式实战-建造者模式,做任何事情都需要步步为营
- 设计模式实战-单例模式,我就是天下无双
- 设计模式实战-抽象工厂模式,分而治之
- 搞定常被问的数组和排序算法,附面试题
- 玩转 Java 时间 + 面试题
- 【分布式技术】分布式系统调度架构之两层调度,解决单体调度问题
- 一致性哈希算法,在分布式开发中你必须会写,来看完整代码
- FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放
- 【Postgres扩展】pg_auto_failover支持高可用性和自动故障转移
- 「PostgreSQL」用MapReduce的方式思考,但使用SQL
- 每天百万交易的支付系统,生产环境该怎么设置JVM堆内存大小
- gb格式注释文件转换成gff3注释文件格式
- 有人问你Elasticsearch分布式架构原理,将这篇文章丢过去