经典数据结构
本博客的主要作为自己的学习笔记,并不是以教授知识为目的。如果有人能从我的博客中学到东西,我很高兴。有人发现文章中有不对的地方,也欢迎大家纠正。
博弈Dream
code and code
展开
-
C语言实现堆栈
堆栈特点:后进先出(Last-In First-Out,LIFO)基本操作:进栈(push)和出栈(pop)其他操作:空堆栈不能执行pop操作,因此需要判断堆栈是否为空。堆栈如果存在最大长度限制,那么需要判断堆栈是否已满。原创 2017-10-13 08:40:45 · 1280 阅读 · 0 评论 -
队列
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,在表的后端(rear)进行插入操作。特点先进先出(First-IN First-OUT,FIFO)基本操作一般而言,队列是进队和出队,原则上来说从队列尾部进队,从队列头部出队顺序队列 建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是...原创 2017-10-14 09:32:20 · 874 阅读 · 0 评论 -
链表
链表是一种非连续、非顺序的存储结构,数据元素的顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。结构 链表的每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。优缺点 使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结...原创 2017-10-15 15:23:48 · 554 阅读 · 0 评论 -
二叉查找树
树的定义定义一棵树一般用递归的方法。一棵树是一些节点的集合。深度:任意节点的深度从根到该节点的唯一路径长高度:任意节点的高度是从该节点到一片树叶的最长路径长树的遍历前序遍历首先检查当前根节点的值,然后递归的遍历左子树和右子树。中序遍历首先遍历左子树,然后检查当前根节点的值,最后遍历右子树。后序遍历首先遍历左右子树,然后检查当根前节点的值。层次遍历逐层检查树的节点。如下面一棵树:前序遍历:20 ...原创 2017-10-18 18:37:26 · 475 阅读 · 0 评论 -
散列(哈希表)
散列是一种用于以常数平均时间执行插入、删除和查找的技术。理想的散列表数据结构是一个包含有关键字的具有固定大小的数组。典型情况下,一个关键字就是一个带有相关值的字符串。 通常把表的大小记作TableSize。每个关键字被映射到从0到TableSize-1这个范围中的某个数,并且被放到适当的单元中。这个映射就叫做散列函数。散列函数 如果输入的关键字是整数,则一般方法是直...原创 2017-10-21 09:11:16 · 726 阅读 · 0 评论 -
红黑树
性质1)每个结点要么是红的,要么是黑的。2)根结点是黑的。3)每个叶结点,即空结点(NULL)是黑的。4)如果一个结点是红的,那么它的俩个儿子都是黑的。5)任一节点至NULL(树尾端)的任何路径,所含的黑节点数必须相同。根据规则5,新增节点必须为红。根据规则4,新增节点的父节点必须为黑。当新节点根据二叉搜索树的规则到达其插入点,却未能符合上述条件时,就必须调整颜色并原创 2017-11-02 11:13:24 · 509 阅读 · 0 评论 -
优先队列(堆)
普通的队列是一种先进先出的数据结构,元素在队列尾追加,在队头删除。在优先队列中,元素被赋予优先级,当访问元素时,具有最高优先级的元素最先删除。 优先队列允许至少下列两种操作的数据结构:Insert(插入)、DeleteMin(删除最小者),它的工作是找出、返回和删除优先队列中最小的元素。Insert相当于入队,而DeleteMin相当于出队。 优先队列可以应用于外部...原创 2017-11-04 14:58:31 · 590 阅读 · 0 评论 -
字典树
字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。三个基本性质:1.根节点不包含字符,除根节点外每一个节点都只包含一个字符; 2.从根节点到某一节点,路径上经过的...原创 2018-02-10 22:33:59 · 772 阅读 · 0 评论 -
单链表的各种操作
1、从单链表中删除指定元素2、翻转单链表3、求单链表中节点个数4、查找链表中倒数第K个节点5、查找链表中间节点6、倒序打印单链表7、已知两个单链表pHead1 和pHead2 各自有序,把它们合并成一个链表依然有序8、判断一个单链表是否有环9、判断两个单链表是否相交10、求两个单链表相交的第一个节点11、已知一个单链表中存在环,求进入环中的第一个节点12...原创 2018-03-30 08:41:15 · 1410 阅读 · 0 评论 -
二叉树的各种操作
二叉树的各种操作1、树的递归遍历2、求二叉树中节点的个数3、求二叉树中叶子节点的个数4、求二叉树的深度5、求第k层节点数6、树的非递归遍历7、求一棵二叉树的镜像8、判断两棵树的结构是否相同9、判断一棵树是否平衡10、将二叉查找树变为有序的双向链表11、判断一棵树是否是另一棵树的子结构12、重建二叉树13、判断是否为二叉搜索树的后序遍历序列14、二叉树中和为某一值的...原创 2018-04-01 09:31:39 · 1383 阅读 · 0 评论 -
跳跃表
跳跃表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表。它的效率可以做到和平衡树相同的平均时间复杂度O(logN),其空间复杂度为O(N); 跳跃列表的算法有同平衡树一样的渐进的预期时间边界,并且更简单、更快速和使用更少的空间。性质1、有很多层结构(链表)组成2、每一层都是一个有序的链表,排列顺序为由高层到底层,都至少包含两个链表节点,分别...原创 2018-04-07 17:45:01 · 367 阅读 · 0 评论 -
B树和B+树
B-tree是一种自平衡数据结构,它能对数据进行排序,并允许在对数时间内进行搜索、顺序访问、插入和删除。B-tree是二叉搜索树的推广,一个节点可以有两个以上的子节点。与自平衡的二叉搜索树不同,b-tree对读取和写入大数据块的系统进行了优化。b树是外部内存数据结构的例子。通常用于数据库和文件系统。B-tree的时间复杂度算法平均最坏情况SpaceO(n)O(n)SearchO(log n)O(l...原创 2018-04-14 22:14:21 · 1061 阅读 · 0 评论 -
AVL树
AVL树是带有平衡条件的二叉查找树。这个平衡条件必须要容易保持,而且必须保证树的深度为为O(logN)。最简单的方法是要求左右子树具有相同的高度。 另一种平衡条件是要求每个结点都必须要有相同高度的左子树和右子树,这个条件太严格,需要放宽条件。 一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树。如下面两棵树,左边的树是AVL树,右边的树不是...原创 2018-08-02 16:04:35 · 2760 阅读 · 0 评论