绪论
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构反映数据的内部构成,即数据由哪部分构成,以什么方式构成,以及数据元素之间呈现的结构。数据结构是一个二元组。
1.数据的逻辑结构:线性结构、非线性结构
数据的存储结构(物理结构):顺序存储、链式存储、索引存储、散列存储
2.算法的五大特征:有穷性(指执行时间有限)、确定性、可行性、输入和输出
算法的五大评价标准:正确性、健壮性、可读性、时间复杂度和空间复杂度
3.抽象数据类型(数据结构)包括三部分:数据、数据关系、数据操作
抽象数据类型按其值的不同特性可分为:
原子类型:其值不可分解
固定聚合类型:其值由确定数目的成分按某种结构组成
可变聚合类型:其构成值的成分的数量不确定
后两种类型可统称为结构类型
4.在决定选取何种存储结构时,一般不考虑各结点的值如何,但是需要考虑结点的个数、对数据有哪些运算、以及所用的编程语言支不支持这种存储结构等。
5.STL:标准模版库
6.广义表属于线性结构
7.一些常用函数
(1)substr函数(字符截取函数):substr(str,pos,len)---从str的第pos位置开始,截取len个字符
一 表
1.递归表(循环表):含回路,深度无穷大
再入表(可重复表):表中元素多次出现
纯表(树):根到叶节点只有一条路径,任何元素只出现一次
线性表:包含于纯表中
递归表>再入表>纯表>线性表
跳表:又叫做跳跃表、跳跃列表,在有序链表的基础上增加了“跳跃”的功能。跳表在原来的有序链表上加上了多级索引,通过索引来快速查找,可以支持快速地删除、插入和查找操作。跳表实际上是一种增加了前向指针的链表,是一种随机化的数据结构。
2.广义表:第一个数据为表头,其他为表尾
(问:线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。这句话对的还是错的?)
3.顺序表不能从表中任一结点出发扫描整个表
4.链表中的结点可含多个指针域,分别存放多个指针
链表的存储空间不一定需要动态分配(例如静态链表)
链表的数据空间应采用堆存储分配策略
二 数组
1.三元组:每个元素要用行号、列号和元素值来表示,在用三元组表示稀疏矩阵时,还需要三个成员来存储矩阵的行数、列数和总元素数
三 树
1.不含任何结点的空树是一棵树也是一棵二叉树
2.树的表示方法有直观表示法、凹入表示法、嵌套集合表示法、广义表表示法
树的存储方式有双亲表示法、左孩子右兄弟表示法和顺序表示法
3.若一个二叉树含有n个结点,则它的二叉链表中必含有2n个指针域,其中必有n+1个空的链域
若一个哈夫曼树中叶子结点数为n,若用二叉链表表示存储结构,其中必有2n个空指针域
(问:二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。---这句话对的还是错的?)
4.B树与B+树
(1)m阶B树:所有结点的平衡因子均等于0的m路平衡查找树
-若根节点不是叶结点,则至少有两棵子树,至多有m棵子树
至少有一个关键字,至多有m-1个关键字
-非根结点至少有⌈m/2⌉棵子树,至多有m棵子树
至少含有⌈m/2⌉-1个关键字,至多含有m-1个关键字
(2)m阶B+树:应数据库所需出现的一种B树的变形树
-每个关键字对应一个子树
-根节点至少有1个关键字,至多有m个关键字
-非根结点至少有⌈m/2⌉个关键字,至多有m个关键字
四 栈
1.栈的应用:符号匹配、表达式求值、实现函数调用
解析XML是标签匹配,栈的经典应用
2.栈的使用不受全局变量和局部变量的限制
五 图
1.AOV网:有向无环图
AOE网:带权的有向无环图
2.有向图的连通包括弱连通、单向连通和强连通
六 查找
1.静态查找
动态查找
静态查找和动态查找的根本区别在于施加在其上的操作不同,静态查找不涉及插入和删除操作,而动态查找涉及插入和删除操作
七 排序
1.归并排序占辅助空间O(n)