数据结构和算法 Data Structures and Algorithms

本文详细介绍了程序设计中的基本概念,包括数据元素、数据结构(线性、非线性、集合、树形、图状结构)、存储结构(顺序、链式、索引、散列)、数据类型和抽象数据类型,以及算法的描述、特性、效率分析和数组与链表的区别。着重探讨了算法设计的要求和效率度量方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一.基本概念

Basic conceptiom

数据元素(元素/记录/结点/顶点)Data elements

(elements/records/nodes/vertices)

结构:数据元素相互之间的关系Structure: The relationship between data elements

逻辑结构的种类

Types of logical structures

存储结构的种类

数据类型和抽象数据类型

Data types and abstract data types

算法和算法分析

Algorithms and algorithm analysis

算法的描述

算法与程序

算法特性:

算法设计的要求:

Requirements for algorithm design

算法效率

Algorithm efficiency

算法时间效率的度量

A measure of the time efficiency of an algorithm

事前分析法

​编辑

时间复杂度计算

1.一层循环

​编辑

2.两层循环

​编辑

3.三层循环

线性表

数组vs向量vs链表

 ​编辑

 二分查找

二叉树遍历

查找

平均查找长度

折半查找(二分查找)


程序=数据结构+算法

Program equals data structure plus algorithm

一.基本概念

Basic conceptiom

数据元素(元素/记录/结点/顶点)Data elements

(elements/records/nodes/vertices)

数据数据元素(组成数据的基本单位)>数据项(构成数据元素的不可分割的最小单位)
如:学生表>个人记录>学号、姓名

数据对象:性质相同的数据元素的集合,是数据的子集

结构:数据元素相互之间的关系Structure: The relationship between data elements

逻辑结构的种类

Types of logical structures

划分方式一:

(1)线性结构:线性表,栈,队列,串

Linear structure: linear table, stack, queue, string

(2)非线性结构:树,图

Nonlinear structures: Trees, graphs

划分方式二:四类基本逻辑结构:

(1)集合结构

Set structure

(2)线性结构(一对一)

Linear structure (one-to-one)

(3)树形结构(一对多)

Tree structure (one-to-many)

(4)图状结构/网状结构

Graph structure/network structure

存储结构的种类

(1)顺序存储结构

Sequential storage structure

(2)链式存储结构

Chain storage structure

(3)索引存储结构

Indexed storage structure

(4)散列存储结构

Hash storage structure

(1)顺序存储结构:用一组连续的存储单元依次存储数据元素,元素之间的逻辑关系由存储位置来表示。C语言中用数组来实现顺序存储结构。

(2)链式存储结构:用一组任意的存储单元存储数据元素,元素之间的逻辑关系由指针来表示。C语言中用指针来实现顺序存储结构。

(3)索引存储结构:在存储数据元素信息的同时,还建立附加的索引表索引项:(关键字,地址) 。稠密索引Dense Index;稀疏索引Sparse Index。

(4)散列存储结构:根据数据元素的关键字直接计算出存储地址。

数据类型和抽象数据类型

Data types and abstract data types

高级语言(如C语言)的数据类型明显的或隐含的规定了在程序在程序执行期间变量和常量的所有可能取值范围,以及所允许进行的操作

数据类型Data Type:一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。

数据类型=值的集合+值集合上的一组操作

抽象数据类型Abstract Data Type,ADT:一个数学模型(逻辑结构)以及定义在此数学模型上的一组操作(抽象运算)。不考虑计算机内的具体存储结构与运算的具体实现算法。

抽象数据类型的形式定义:(D,S,P)

D数据对象,S是D上的关系集,P是对D的基本操作集

抽象数据类型的定义格式:

参数表:

赋值参数(只提供输入值)

引用参数(提供输入值且返回操作结果)

算法和算法分析

Algorithms and algorithm analysis

算法的描述

自然语言:英文,中文

流程图:传统流程图,NS流程图

伪代码:类语言:类C语言

程序代码:C语言程序

算法与程序

算法特性:

1.有穷性

2.确定性

3.可行性

4.输入:0或多个

5.输出:一个或多个

算法设计的要求:

Requirements for algorithm design

1.正确性Correctness

2.可读性Readability

3.健壮性Robustness

4.高效性Efficiency

(健壮性,乍一听:哇哦)

算法效率

Algorithm efficiency

1.时间效率Time efficiency:算法所耗费的时间

2.空间效率Spatial efficiency:算法执行过程中所耗费的存储空间

二者有时候矛盾

算法时间效率的度量

A measure of the time efficiency of an algorithm

算法时间效率,可以依据该算法编制的程序,在计算机上执行,所消耗的时间来度量。

两种度量方法:

事后统计Post hoc statistics:实现算法,然后测量时间和空间的开销。(缺点是可能比较依赖计算机软硬件的条件就是会掩盖算法本身的一些优劣情况)

事前分析Prior analysis:对算法要耗费的资源进行估算的方法。

所以一般更多采用事前分析法

事前分析法

算法运行时间=一个简单操作所需的时间×简单操作次数

算法运行时间=∑每条语句的执行次数(语句频度)×该语句执行一次所需的时间(一般由机器本身软硬件环境决定,与算法无关)

假设每条语句执行一次所需的时间均为单位时间,即讨论算法运行时间就是讨论频度之和

时间复杂度计算

1.一层循环

2.两层循环

3.三层循环

其他例题

总结

易错题:

线性表

单链表的插入

单链表的删除

习题

数组vs向量vs链表

最近看一位印度老哥的B站视频,讲的好棒

 

 

 二分查找


二叉树遍历

前序遍历

中序遍历

后序遍历

层序遍历

总结二叉树遍历

编码

哈夫曼编码

并查集

查找

平均查找长度

折半查找(二分查找)

二叉搜索树

平衡二叉树(AVL树)

红黑树

B树(多叉平衡搜索树)

哈希表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值