数据结构与算法:程序员的必修课

一、数据结构核心知识

(一)学习数据结构的意义

是计算机科学的基础,帮助理解程序工作原理,更高效解决问题,是大厂面试必备内容,可衡量程序员技术功底,结合算法学习,能提升分析与解决问题的能力

(二)数据结构的定义

用于组织和存储数据的方法,目的是高效访问和修改数据。例如 “整理书籍”:杂乱堆放难以查找,按规则(作者、类别等)排列则便于检索,这一过程类比数据结构的作用。

(三)数据结构的分类

数据结构分为逻辑结构和物理结构两大类,具体如下:

逻辑结构:(抽象模型,按数据元素关系分类)。

集合结构: 数据元素仅属于同一集合,无其他关系。

线性结构: 数据元素间存在 “一对一” 关系。

树形结构:数据元素间存在 “一对多” 的层次关系。

图形结构: 数据元素间存在 “多对多” 关系。

物理结构:(存储结构,数据在计算机中的存储方式) 顺序存储 -链式存储 -索引存储 -散列存储 。

(四)数据结构的用途

1.存放要处理的数据

2.实现算法策略

(五)数据结构的关键组成

数据的逻辑结构(线性结构:线性表、栈、队列、串及数组;非线性结构:树形结构、图形结构)

数据的存储结构(顺序、链式、索引、散列存储)

数据的运算(检索、排序、插入、删除、修改等)

二、算法核心知识

(一)算法的定义与本质

通俗理解:解决问题的机械程序步骤,按步骤执行一定能得到结果。例如 “四则运算先乘除后加减”“从里往外脱括号” 都是算法。

严格定义:一系列将问题的输入转换为输出的计算或操作步骤。

(二)算法的分类与特征

分类:计算机算法与人工算法

部分问题无计算机算法。

部分问题的计算机算法与人工算法不同。

计算机算法的 5 大特征

输入:有外部提供的量作为输入。

输出:产生至少一个量作为输出。

确定性:每条指令清晰、无歧义。

有限性:每条指令执行次数和时间均有限。

可行性:每一步操作均可实现。

(三)算法的 3 大要素

数据:运算序列中作为运算对象和结果的数据。

运算:赋值、算术和逻辑运算等。

控制和转移:运算序列中的控制与转移逻辑。

(四)算法的描述语言

包括自然语言、数学语言、流程图、程序设计语言等。

(五)问题的求解过程(6 步)

问题的陈述:用科学规范语言准确描述问题

建立数学模型:分析问题,明确操作对象及关系,用数学语言描述

设计算法:根据数学模型设计计算机求解算法

算法的正确性证明:证明算法对所有合法输入,均能在有限次计算后产生正确输出

算法的程序实现:将算法正确编写为机器语言程序

算法分析:估算执行算法消耗的计算机资源

三、数据结构与算法的关系

核心公式:程序 = 算法 + 数据结构;算法 = 逻辑 + 控制

相互影响

数据结构为算法提供存储结构,算法依赖数据结构进行操作

数据结构直接影响算法的选择和效率,例如不同存储结构(顺序、链式)会导致算法执行速度、空间占用差异

算法的地位:算法是程序的灵魂

四、算法的评价标准

(一)好算法的 5 大特性

正确性:首要且最基本特性,能正确求解问题。

可读性:思路清晰、层次分明,便于阅读和修改。

健壮性:面对异常情况(非法数据、操作不当)能适当处理。

高效性:占用存储空间少,执行时间短。

有限性:指令执行次数和时间有限(与算法特征一致,是正确性和高效性的基础)。

(二)算法复杂度(评价高效性的核心指标)

1. 定义与分类

算法复杂度分为时间复杂度和空间复杂度,用于衡量算法在计算资源(时间、空间)消耗上的效率,核心关注 “输入规模 n 增长时,复杂度的变化趋势”。

2. 时间复杂度

定义:执行算法所需的计算工作量,与输入规模 n 相关

分析逻辑

忽略机器速度差异:聚焦算法本身的计算步骤,而非硬件性能

忽略小规模输入:仅关注 n 较大时的复杂度差异(小规模输入下,不同算法耗时差异可忽略)

基本指令:以算术指令、数据移动指令、控制指令为时间单位,例如:

int a = 1; 运行时间 1

if (a > 1) {} 运行时间 1

for (int i = 0; i 

大 O 表示法(渐进上界)

定义:对于函数 g (n),O (g (n)) 是所有满足 “存在正常量 c 和 n₀,当 n≥n₀时,0≤f (n)≤cg (n)” 的函数 f (n) 的集合

作用:忽略常数因子和低阶项,聚焦复杂度的增长趋势,例如:

T(n)=3n+2 → O(n)

T(n)=3n²+4n+2 → O(n²)

T(n)=0.5n² → O(n²)

3. 空间复杂度

定义:算法执行所占用的内存空间,与输入规模 n 相关

计算规则:忽略常数因子,例如:

Array [100] :空间复杂度 O (1)(常数规模,忽略具体数值 100)

Array[N]:空间复杂度 O (N)(与输入规模 n 正相关)

int val = 1;:空间复杂度 O (1)(单个变量,常数空间)

4. 常见复杂度排序(按增长速度从慢到快)

常数阶 O (1) 

指数阶算法性能极差:随 n 增大,时间 / 空间消耗急剧增长,实际应用中尽量避免。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值