数据结构与算法的知识点

数据结构

数据结构

1. 数组

数组的定义:由一组具有相同类型的数据元素组成,并存储在一组连续的存储单元中的数组元素我们称之为数组。数组有一维数组、二维数组、N维数组。
数组的特点
元素类型是固定的、长度是固定的、通过角标查询,查询快,增删慢。

2. 链表

链表从连接方式看可以分为:单链表循环链表双向链表
链表节点的逻辑顺序和物理顺序不一定相同。
单链表的结构:链表中的节点包括数据域和指针域两个域。数据域data用来存储节点的值,指针域nest用来存储下一个节点的地址。头指针H指向第一个节点,最后一个节点的指针域为空(NULL)。
为方便统一表的运算处理,在单链表的第一节点之前附设一个头节点,头结点的数据域可存储线性表的长度附加信息,也可什么都不存,头结点的指针域存储指向第一个节点的存储位置。
单链表的操作必须从头指针开始依次访问表中的节点。查询慢,增删快。

3. 线性表

线性表的定义
线性表是由n个类型相同的数据元素的有限序列。除第一个和最后一个元素以外,其余的每个元素都只有唯一的直接前驱和直接后继。
线性表的特点
<1>同一性:数据元素类型相同。
<2>有穷性:数据元素有限的。
<3>有序性:相邻数据元素之间存在序偶关系。
线性表的顺序存储结构
用一组地址连续的存储单元依次存储线性表中的各个元素,逻辑上相邻的数据元素在物理上也相邻。
随机查找速度快,大量插入删除效率低。
线性表的链式存储

线性表的基本运算
查找、插入、删除

4. 哈希表

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,理想情况下它应该计算起来简单,并且应该保证任何两个不同的关键字映射到不停的单元。存放记录的数组叫做散列表。
给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。
若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2),这种现象称为碰撞。
若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数,这就是使关键字经过散列函数得到一个“随机的地址”,从而减少碰撞。
选取散列函数的常用方法
<1> 直接寻址法。
<2> 平方取中法。
<3> 除留余数法。
处理冲突的常用方法
<1> 开放寻址法。
<2> 链地址法(拉链法)。
<3> 再散列法。
查找性能
查找过程中,关键码的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。
如果输入的关键字是整数,则一般合理的方法就是直接返回 key mod tableSize。如果关键字是字符串,一种选择方法是把字符串中字符的ASCII码(或Unicode码)值加起来之后再对tableSize取余。

5. 栈

栈作为一种限定性的线性表,是一种先进后出(LIFO)的线性表,是将线性表的插入和删除运算限制为仅在表的一端进行。
通常将表中允许进行插入和删除操作的一端称为栈顶,它由一个称为栈顶指针的位置指示器指示,另一端称为栈底,插入操作称为进栈或入栈,删除操作称为出栈或退栈。
栈的两种存储结构顺序栈是用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。链栈即采用链表作为存储结构实现的栈,为便于操作,这里采用带头结点的单链表实现栈,采用链栈不必预先估计栈的最大容量,只要系统有可用空间,链栈就不会出现溢出。
栈的应用
<1> 括号匹配问题
<2> 表达式求值问题
<3> 十进制正整数转换为R进制。

6. 队列

队列是另一种限定性的线性表,它只允许在表的一端(队尾)插入元素,而在另一端(队头)删除元素,所以队列具有先进先出(FIFO)的特性。
用链表表示的队列简称为链队列。队列的一种顺序存储称为顺序队列,由于它存在假溢出的问题,可以使用循环队列解决该问题,为了区分循环队列是空队还是满队的两种方法是:第一是损失一个元素空间,第二种方法是增设标志量tag。

7. 串

字符串是由零个或多个字符组成的有限序列。串也是一种特定的线性表。串的顺序存储结构:定长顺序串堆串。串也可以采用链式存储结构称为块链串

8. 树

树是n(n >= 0)个结点的有限集合T。当n=0时,称为空树;当n>0时,该集合满足如下条件:
<1> 其中必有一个称为根(root)的特定结点,它没有直接前驱,但有零个或多个直接后继。
<2> 其余n-1个节点可以划分为m(m>=0)个互不相交的有限集。
树的相关术语
结点:包括一个数据元素及若干指向其他节点的分支信息。
结点的度:一个结点的子树个数称为此节点的度。
叶节点:度为零的节点。
分支结点:度不为零的节点。
结点的层次:从根结点开始定义,根结点的层次为1,跟的直接后继的层次为2,以此类推。
结点的层序编号:将树中的节点按从上层到下层,同层从左到右的次序排成一个线性序列,依次给它们编以连续的自然数。
树的度:树中所有节点的度的最大值。
树的高度(深度):树中所有节点的层次的最大值。
森林:m(m>=0)棵互不相交的树的集合。
孩子节点:一个结点的直接后继称为该节点的孩子节点。
双亲结点:一个结点的直接前驱称为该节点的双亲结点。
兄弟结点:同一双亲结点的孩子节点之间互称兄弟结点。

二叉树:

二叉树的定义:把满足以下两个条件的树形结构叫做二叉树:
<1> 每个节点的度都不大于2
<2> 每个节点的孩子节点次序不能任一颠倒位于左边的孩子叫做左孩子,右边的叫做右孩子。
二叉树的性质
<1> 在二叉树的第i层上至多有2的(i-1)次方个节点(i>=1)。
<2> 深度为k的二叉树至多有2的k次方减1个节点(k>=1)。
<3> 对任意一颗二叉树T,若终端节点数为x,而其度数为2的节点数为y,则x=y+1。
满二叉树
深度为k且有2的k次方减1个节点的二叉树。
完全二叉树
深度为k,节点数为n的二叉树,如果其节点1到n的位置序号分别与满二叉树的节点1到n的位置序号一一对应,则为完全二叉树。
二叉树的存储结构
<1> 顺序存储。
<2> 链式存储(二叉链表):每个节点至少包括三个域:数据域、左孩子域、右孩子域。
二叉树的遍历
<1> 先序遍历:访问根结点---按先序遍历左子树---按先序遍历右子树。
<2> 中序遍历:按中序遍历左子树---访问根结点---按中序遍历右子树。
<3> 后序遍历:按后序遍历左子树---按后序遍历右子树---访问根结点。
<4>深度优先遍历:在深度优先级中,我们希望从根结点访问最远的结点。
<5>广度优先遍历:广度优先遍历会先访问离根节点最近的节点。二叉树的广度优先遍历又称按层次遍历。算法借助队列实现。
树的主要存储方法
<1> 双亲表示法
<2> 孩子表示法
<3> 孩子兄弟表示法
将n叉树转换为二叉树
一般有序树可映射为二叉树,但反之未必成立。
n叉树转换为二叉树的方法:二叉树中结点x的左子结点为n叉树中结点x的左子结点;二叉树中结点x的右子结点为n叉树中结点x的第一个右边的同级结点y。
二叉树当且仅当根节点没有右子结点时可转换为n叉树。
二叉查找树
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树

  1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 左、右子树也分别为二叉排序树;
  4. 没有键值相等的节点。

AVL树
AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树本质上还是一棵二叉搜索树,它的特点是

  1. 本身首先是一棵二叉搜索树。
  2. 带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。
    也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。

红黑树
对红黑树的操作在最坏的情形下花费O(log N)时间。红黑树是具有下列着色性质的二叉查找树:

  1. 每一个节点或者着成红色,或者着成黑色;
  2. 根是黑色的;
  3. 如果一个节点是红色的,那么他的子节点必须是黑色的;
  4. 从一个节点到一个nu l l应用的每一条路径必须包含相同数目的黑色节点。

9. 堆

堆是一种特别的树状数据结构。
若是满足以下特性,即可称为堆:“给定堆中任意节点 P 和 C,若 P 是 C 的母节点,那么 P 的值会小于等于(或大于等于) C 的值”。若母节点的值恒小于等于子节点的值,此堆称为最小堆。反之,若母节点的值恒大于等于子节点的值,此堆称为最大堆。在堆中最顶端的那一个节点,称作根节点,根节点本身没有母节点。

10. 图

图的定义
图(Graph)是一种网状数据结构,其形式化定义如下:
Graph=(V, R)
V={X | X属于DataObject}
R={VR}
VR={<x, y> | P(x, y) ^ (x, y属于V)}
DataObject为一个集合,该集合中所有的元素具有相同的特性。V中的数据元素通常称为顶点,VR是两个顶点之间的关系的集合。P(x, y)表示x和y之间有特定的关联属性P。
若<x, y>属于VR,则<x, y>表示从顶点x到顶点y的一条弧(arc),并称x为弧尾(tail)或起始点,称y为弧头(head)或终端店,此时图中的边是有方向的,称这样的图为有向图。
<x, y>属于VR,必有<y,x>属于VR,及VR是对称关系,这时以无序对(x,y)来代替两个有序对,表示x和y之间的一条边(edge),此时的图称为无向图。
基本术语
设n表示图中顶点的个数,用e表示图中边或者弧的数目,并且不考虑图中每个顶点到自身的边或弧。对于无向图而言,其边数e的取值范围是0 ~ n(n-1) / 2,有n(n-1) / 2条边(图中每个顶点和其中n-1个顶点都有边相连)的无向图为无向完全图。对于有向图而言,其边数e的取值范围是0 ~ n(n-1) ,有n(n-1) 条边(图中每个顶点和其中n-1个顶点都有弧相连)的有向图为有向完全图。对于有很少条边的图称为稀疏图,反之称为稠密图。带权的图称为有向无环图(DAG)是指一个无环的有向图。
图的存储结构
<1> 邻接矩阵表示法。
<2> 邻接表。
<3> 邻接多重表。
<4> 十字链表。
图的遍历
<1> 深度优先搜索。
<2> 广度优先搜索。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • 数据 元素又称为元素、结点、记录是数据的基本单位 数据项是具有独立含义的最小标识单位 数据的逻辑结构 数据的逻辑结...
    PPPeg阅读 13,713评论 0 15
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,290评论 0 3
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,771评论 0 19
  • 当今孩子们出现的问题,不论在数量上还是程度上,都比过去严重很多。新一代的父母知道,不能用传统的方法对待自己的孩子。...
    百安育儿阅读 231评论 0 0
  • h先生惹怒我了 他一定又没吃药了 居然屡次把我踢出同学群 明天我一定要好好收拾他。
    这就是传说中的娇羞吗阅读 167评论 0 0