Nicklaus教授提出:
程序=算法+数据结构
数据元素data element:数据的基本单位,也称结点(node)或记录(record)
数据项data item:具有独立含义的数据的最小单位,也称域
数据对象:性质相同的有限个数据元素的集合,数据的一个子集
数据结构Data Structure:相互之间存在一种或者多种特定关系的数据元素的集合
定义2: 2+1(两个层次和一个操作)
逻辑结构:4种
存储结构(物理结构):4种
操作(运算,行为)
划分方法一
线性结构:线性表、栈、队列、串
非线性结构:树、图
划分方法二
集合:同一个集合,没有其他关系
线性结构1:1
树形结构 1:m
图形结构n:m
反应数据元素之间的逻辑关系,独立于计算机
前驱结点 后继结点 开始结点 终端结点
顺序存储结构(数组):逻辑结构到存储结构的直接映射,连续
链式存储结构(指针):
索引存储结构:建立索引表
哈希存储结构:根据关键字通过哈希函数直接计算出值
增删改查–插入、删除、修改、查找、排序
C语言中:
基本数据类型:char、int、float、double、void
构造数据类型:数组、结构体、共用体、文件
数据类型:一组性质相同的值的集合和定义再次几何上的一组操作的总称
**抽象数据类型ADT(Abstract Data Type)**也称增广数据类型:逻辑结构+抽象运算
包括:数据对象、数据关系和基本运算
特征:数据抽象和数据封装(类实现)
表示:(D、S、P)三元组
D–数据对象 S是D上的关系集 P是D中数据源算的基本运算集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z635wvmy-1613202420035)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\1613139065644.png)]
有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列。(描述集、指令集、序列集)
特征5个
输入性 有0个或多个输入
输出性 至少一个以上输出
有穷性 执行有穷步后结束
确定性 每步定义都是确切、无歧义的
可行性(有效性)
算法的评价(设计的目标):
正确性
可读性 易读
健壮性 鲁棒性
高效性(时间代价和空间代价)
时间复杂度(重要)
事前统计:
事后统计:利用计算机内的计时功能(一般不用)
时间复杂度渐进表示法
大O法:T(n)=O(n) 随问题规模n变大,算法执行时间增长率和f(n)的增长率相同
语句频度法:计算该语句重复次数
空间复杂度
三个组成部分
存储算法本身所占用的空间
算法的输入/输出数据占用的空间
算法在运行过程中临时占用的辅助空间
重点 1:基本术语:数据结构
重点 2:抽象数据类型
重点 3:算法优劣的评价标准 (时间复杂度)
重点 4:数据结构的学习方法
常见增长率 | 增长率 | |
---|---|---|
O(1) | 常量阶,与 n 无关 | 慢 |
O(log n) | log n 阶 | | |
O(n) | 常数阶 | | |
O(n log n) | n log n 阶 | | |
O(n²) | 平方阶 | | |
O(n³ ) 立方阶 | 立方阶 | ↓ |
O(2ⁿ ) | 指数阶 | 快 |
补充:
char *p;
p=new char[10];//动态分配10个连续的空间,并将该空间的首地址赋值给p
strcpy(p,"China");//将“China”存放到p指向的空间
cout<<*p<
结构体:一组被称为结构体成员或者数据域的数据项组成。
struct teacher //教师结构体类型名为teacher
{ int no;
char name[8];
int age;
};
//定义一个结构体变量t
teacher t;
//定义结构体变量并初始化
teather t1={1,“王强”,35};
//引用成员
t1.no
共同体:不同的成员组织为一个整体,他们在内存中共享一段存储单元
union tag{
short int n;
char[2];
};
//定义一个共同体变量u
union tag u;
//引用n成员
u.n;
//引用ch成员
u.ch[0];
类的定义格式和类对象的声明
//类的声明
class 类名
{
private:
私有数据成员和成员函数;
protected:
保护数据成员和成员函数;
public:
公有函数成员和成员函数;
}
//类的实现
各个成员函数的实现
构造函数的名字与类名相同;一定具有public访问权限;没有任何类型。不属于返回值函数也不属于void函数;类可以有多个构造函数,此时它们的参数各不相同
对象是类的实例,类的变量;析构函数在类对象销毁时自动执行;一定具有public访问权限;一个类只能有一个析构函数,且析构函数没有参数;没有任何类型;不属于返回值函数也不属于void函数
说明:数据结构中,通常用构造函数实现数据结构的初始化操作。析构函数用于实现数据结构的销毁操作
值参数 | 引用参数 |
---|---|
不含任何修饰符 | “&” |
单向传递 | 双向传递 |
不会修改原来的实参的值 | 和实参共享相同的存储空间,修改会改变原来的值 |
不含任何修饰符 | “&” |
单向传递 | 双向传递 |
不会修改原来的实参的值 | 和实参共享相同的存储空间,修改会改变原来的值 |