您的位置:首页 > 理论基础 > 数据结构算法

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

2014-02-09 21:51 274 查看
1. 线性数据结构

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

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

2. 图

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

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

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

一个图:



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



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

3. 权值图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: