软件设计师笔记之数据结构

数据结构是指数据对象及其相互关系和构造方法。在软件设计过程中,选用不同的数据结构对系统最终效果的影响极大。因此,该知识点是软件设计师核心考点。

本章我们需要掌握数组、图、广义表、树与二叉树、线性表、排序与查找、算法基础及常见的算法等相关知识。

本章主要梳理笔记常见数据结构的逻辑结构特性及存储的相关内容。


目录

一、数组与线性表

1. 数组

2. 稀疏矩阵

3. 线性表

二、树

1.数据逻辑结构

2. 树的概念

3. 树的遍历

4. 二叉树的概念

5. 二叉树的遍历

6.反向构造二叉树

7.树转二叉树

8. 二叉查找树

9. 平衡二叉树

10. 线索二叉树

11. 哈夫曼树(最优二叉树)

12.总结

二、图

1. 图的相关概念

2. 图的存储结构

3. 图的遍历

4. 拓扑排序

5. 最小生成树


一、数组与线性表

按数据的逻辑结构来划分,常见的数据结构包括:数组(静态数组、动态数组)、线性表(顺

序表、链表、队列、栈)、(二叉树、查找树、平衡树、线索树、堆)、

1. 数组

数组是一种常见的数据结构,根据数组下标的个数,可以把数组分为一维、二维、…、多维数组,如表(数组类型)所示。维度是指下标的个数。一维数组只有一个下标;二维数组则有两个下标,第一个称为行下标,第二个称为列下标。通常根据数组的定义计算存储地址

数组类型 存储地址计算
一维数组 a[n] a[i] 的存储地址为: a+i*len
二维数组 a[m][n]

a[i][j] 的存储地址(按行存储)为:a+(i*n+j)*len

a[i][j] 的存储地址(按列存储)为:a+(j*m+i)*len
三维数组 a[m][n][o] a[i][j][k] 的存储地址为:a+(i*n+j*o+k)*len

注:表中的计算公式的a为数组首地址,len为每个数据对象的长度,i 与j 的下标默认从0开始。

2. 稀疏矩阵

在计算机中存储一个矩阵时,可使用二维数组。例如,M×N阶矩阵可用一个数组a[ M] [ N] 来存储(可按照行优先或列优先的顺序)。如果一个矩阵的元素绝大部分为零,则称为稀疏矩阵。若直接用一个二维数组表示稀疏矩阵,则会因存储太多的零元素而浪费大量的内存空间。在稀疏矩阵中,有一种情况非常常见,即稀疏矩阵内部存在对称性。这样,我们可以采用一维数组来表示它们,这也常称为压缩存储。

考试的时候选择代入法:把数组下标带入公式进行计算,看是否满足结果。

由于二维数组的行和列是相等的,求存储在某个元素之前的元素个数,如果在这个元素的行等于列的情况下,那么存储元素的个数是与存储方式无关的。

3. 线性表

线性表是用来表示数据对象之间的线性结构,通俗地说,线性结构是指所有结点按“一个接着一个排列”的方式相互关联而组成一个整体“。

线性结构是n个结点的有穷序列。通常表示为(a1,a2,…,an),a1称为起始结点,an称为结束结点,i 称为ai 在线性表中的序号或位置,线性表所含结点的个数称为线性表的长度,长度为0的线性表称为空表。

线性表主要的存储结构有两种:顺序存储结构和链式存储结构。采用顺序存储结构,就称为顺序表(常用数组实现);采用链式存储结构则称为线性链表(即链表)。

(1)顺序表

顺序存储是最简单的存储方式,通常用一个数组,从数组的第一个元素开始,将线性表的结点依次存储在数组中,即线性表的第i 个结点存储在数组的第i (0≤i ≤n–1)个元素中,用数组元素的顺序存储来体现线性表中结点的先后次序关系。

顺序存储线性表的最大优点就是能随机存取线性表中的任何一个结点缺点主要有两个,一是数组的大小通常是固定的,不利于任意增加或减少线性表的结点个数;二是插入和删除线性表的结点时,要移动数组中的其他元素,操作复杂

(2)链表

链表就是采用链式存储实现的线性表。它是动态分配链表结点,通过链接指针,将各个节点按逻辑顺序连接起来。根据其存储结构的不同,可以分为单链表、循环链表双链表三种,软件设计师考试中目前主要考查前两种。

单链表

单链表又分为:存在头结点和不存在头结点

循环链表

循环链表与单链表的区别仅仅在于其尾结点的指针域值不是nul l ,而是指向头

你可能感兴趣的:(软件设计师笔记总结,软件设计师,数据结构)