数据结构第一章 绪论

第一章 绪论

1.1 什么是数据结构

Nicklaus教授提出:

程序=算法+数据结构

1.1.1 数据结构定义

数据元素data element:数据的基本单位,也称结点(node)或记录(record)

数据项data item:具有独立含义的数据的最小单位,也称域

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

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


定义2: 2+1(两个层次和一个操作)

逻辑结构:4种

存储结构(物理结构):4种

操作(运算,行为)

1.1.2逻辑结构

划分方法一

线性结构:线性表、栈、队列、串

非线性结构:树、图

划分方法二

集合:同一个集合,没有其他关系

线性结构1:1

树形结构 1:m

图形结构n:m


反应数据元素之间的逻辑关系,独立于计算机

前驱结点 后继结点 开始结点 终端结点

1.1.3存储结构

顺序存储结构(数组):逻辑结构到存储结构的直接映射,连续

链式存储结构(指针):

  • 一个逻辑元素用一个结点存储
  • 可以连续也可以不连续
  • 通过指针域来反映数据元素的逻辑地址

索引存储结构:建立索引表

哈希存储结构:根据关键字通过哈希函数直接计算出值

1.1.4数据的运算

增删改查–插入、删除、修改、查找、排序

1.1.5数据结构与数据类型

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)]

1.2算法和算法分析

1.2.1定义

有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列。(描述集、指令集、序列集)

特征5个

输入性 有0个或多个输入

输出性 至少一个以上输出

有穷性 执行有穷步后结束

确定性 每步定义都是确切、无歧义的

可行性(有效性)

算法的评价(设计的目标):

正确性

可读性 易读

健壮性 鲁棒性

高效性(时间代价和空间代价)

1.2.2算法效率的度量(评价算法优劣标准)

时间复杂度(重要)

事前统计:

  • 依据算法选用何种策略
  • 问题规模
  • 程序语言
  • 编译程序产生机器代码质量
  • 机器执行指令速度

事后统计:利用计算机内的计时功能(一般不用)

时间复杂度渐进表示法

大O法:T(n)=O(n) 随问题规模n变大,算法执行时间增长率和f(n)的增长率相同

语句频度法:计算该语句重复次数

空间复杂度

三个组成部分

存储算法本身所占用的空间

算法的输入/输出数据占用的空间

算法在运行过程中临时占用的辅助空间

第一章总结

重点 1:基本术语:数据结构

重点 2:抽象数据类型

重点 3:算法优劣的评价标准 (时间复杂度)

重点 4:数据结构的学习方法

数据结构第一章 绪论_第1张图片

常见增长率 增长率
O(1) 常量阶,与 n 无关
O(log n) log n 阶 |
O(n) 常数阶 |
O(n log n) n log n 阶 |
O(n²) 平方阶 |
O(n³ ) 立方阶 立方阶
O(2ⁿ ) 指数阶

补充:

1.3C++中描述算法的相关内容(重要)
new运算符:为一个指针变量分配一片连续的空间
delete运算符:释放new分配的空间
char *p;
p=new char[10];//动态分配10个连续的空间,并将该空间的首地址赋值给p
strcpy(p,"China");//将“China”存放到p指向的空间
cout<<*p<
C++中的结构体类型

结构体:一组被称为结构体成员或者数据域的数据项组成。

struct teacher	//教师结构体类型名为teacher
{	int no;
 	char name[8];
 	int age;
};
//定义一个结构体变量t
	teacher t;
//定义结构体变量并初始化
    teather t1={1,“王强”,35};
//引用成员
    t1.no
C++中的共同体类型

共同体:不同的成员组织为一个整体,他们在内存中共享一段存储单元

union tag{
	short int n;
	char[2];
};
//定义一个共同体变量u
union tag u;
//引用n成员
u.n;
//引用ch成员
u.ch[0];
C++中类的设计

类的定义格式和类对象的声明

//类的声明
class 类名
{
	private:
		私有数据成员和成员函数;
	protected:
		保护数据成员和成员函数;
	public:
		公有函数成员和成员函数;
}
//类的实现
各个成员函数的实现
构造函数

构造函数的名字与类名相同;一定具有public访问权限;没有任何类型。不属于返回值函数也不属于void函数;类可以有多个构造函数,此时它们的参数各不相同

析构函数

对象是类的实例,类的变量;析构函数在类对象销毁时自动执行;一定具有public访问权限;一个类只能有一个析构函数,且析构函数没有参数;没有任何类型;不属于返回值函数也不属于void函数

说明:数据结构中,通常用构造函数实现数据结构的初始化操作。析构函数用于实现数据结构的销毁操作

成员函数的参数传递
值参数 引用参数
不含任何修饰符 “&”
单向传递 双向传递
不会修改原来的实参的值 和实参共享相同的存储空间,修改会改变原来的值
不含任何修饰符 “&”
单向传递 双向传递
不会修改原来的实参的值 和实参共享相同的存储空间,修改会改变原来的值

你可能感兴趣的:(数据结构)