算法导论笔记(2):几种基本数据结构

本文详细阐述了线性数据结构如数组、链表、栈、队列及优先权队列,并介绍了图的基本概念及其表示方式,旨在帮助读者深入理解这些核心数据结构的应用与特性。

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

1. 线性数据结构

线性数据结构中最重要的是数组和链表。访问数组中任何一个元素所用的时间都是相同的,而链表不具备这样的属性。数组被用于实现其他重要的数据结构,例如字符串。对字符串的操作与对数组的操作大不相同,字符串的操作包括:计算长度、比较字符串的大小或者连接两个字符串等。对链表中不同元素的访问时间是不同的,因为任何访问必须从第一个元素开始。对链表的插入或删除操作要比数组简单一些。

数组和链表是两类最重要的线性数据结构,其他的线性数据结构还包括栈和队列。栈是一种特殊的链表,其插入和删除操作都只能在顶端。栈具有先进后出的特点,在递归算法中是非常重要的。队列则是另外一种特殊的链表,在头部删除、尾部加入,具有先进先出的特点,象柜员机前面排队的人群一样。队列在一些图算法中有非常重要的应用。优先权队列中的元素具有权值,通常的操作是从种选择权值最高的元素来进行,包括寻找权值最大的、删除权值最大的以及加入一个元素等。通常的实现方式是数组或者排序好的数组,但这两种都不是最有效的实现。优先权队列比较好的实现是一个heap。

2. 图

图由结点和边组成,一般允许有循环边(存在以同一点为起点和终点的边),但是不能有重复边(两条边的起点和终点都相同)。

图一般有两种表示方式:邻接矩阵和邻接列表。若途中有n个结点,则有一个n*n的邻接矩阵。矩阵中的元素为1,代表对应的行列结点之间有一条连接边。无向图的邻接矩阵都是对称的。

邻接表是链表的集合,每个结点有一个对应的链表,链表中包含 了与该链表对应结点相邻的所有结点。换句话说,邻接列表中每个列表代表了邻接矩阵中的列,列表中出现的元素对应于列中的“1”。

一个图:


图对应的邻接矩阵和邻接列表:


若图是稀疏的,则邻接表的表示使用的空间要小些;反之则是邻接矩阵使用的空间要小些。一般而言,两种表示法的方便性依赖于问题的性质、算法以及输入图的性质。


3. 权值图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值