数据结构知识总结
文章平均质量分 91
码农印象
修炼的过程中,最好有人和你并肩而行,共同成长!努力做一个文邹邹的工具人,你做得越多,你知道的越多......
展开
-
【数据结构】静态顺序表
前言: 对于初学数据结构的新手来说,第一步都是从线性表学起,我们都知道线性表是:具有n个数据元素的有限序列,且能进行增删改查操作的一种线性数据结构。而根据数据元素在存储单元中存储的方式不同又分为顺序表与链表。顺序表就是用一段地址连续的存储单元存储数据,我们大多选用的都是数组,而对于数组可分为静态数组与动态数组,所以顺序表又可分为静态顺序表与动态顺序表。今天来一起学习的是:静态顺序表的...原创 2018-06-22 00:43:12 · 462 阅读 · 0 评论 -
【数据结构】七大查找算法(附C语言代码实现)
转自:http://www.cnblogs.com/leezx/p/5719012.html阅读目录1、顺序查找2、二分查找3、插值查找4、斐波那契查找5、树表查找6、分块查找7、哈希查找查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐...转载 2018-10-08 16:16:10 · 10307 阅读 · 0 评论 -
【数据结构】各类排序算法及其优化总结
前言一、插入排序☞ 直接插入排序☞ 二分插入排序(优化)☞ 希尔排序二、选择排序☞ 选择排序(单边缩小空间)☞ 选择排序(双边缩小空间1.0)☞ 选择排序(双边缩小空间2.0)☞ 堆排序四、交换排序☞ 冒泡排序☞ 快速排序五、归并排序☞ 归并排序六、计数排序☞ 计数排序七、总结八、附加本文对各类排序算法的实现、优化、复杂度、稳定性、适用场景作以全面总结,为了突出算法的简洁、易懂,去除了一些冗余操...原创 2018-11-18 21:54:54 · 864 阅读 · 0 评论 -
【数据结构】深度优先遍历 和 广度优先遍历
什么是 深度/广度 优先遍历?深度优先遍历简称·DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。这两种遍历方式有什么不同呢?我们来举个栗子:我们来到一个游乐场,游乐场里有11个景点。我们从景点0开始,要玩遍游乐场的所有景点,可以有什么样的游玩次序呢?第一种是一头扎到底的玩法。我们选择一...原创 2019-12-13 18:19:46 · 1218 阅读 · 0 评论 -
【数据结构】轻松get单链表面试题
前言删除无头单链表的非尾节点(不能遍历单链表)在无头单链表非头节点前插入值为data的节点用单链表实现约瑟夫环逆置单链表(利用三个指针进行逆置)逆置单链表(头插法)对单链表进行冒泡排序(升序)查找单链表的中间节点(只能遍历一次链表)查找单链表的倒数第K个节点(只能遍历一次链表)删除单链表倒数第K个节点合并两个有序单链表,合并之后依然有序求单链表中结点的个数判断一个单链表中是否有环判断两个单链表是否...原创 2018-10-24 19:10:56 · 361 阅读 · 0 评论 -
【数据结构】图简介
前言一、图的概念二、图的术语三、图的表示1. 邻接矩阵2. 邻接表和逆邻接表3. 十字链表四、总结一、图的概念究竟什么是图呢?大家先来想一想咱们常用的互联网产品。举个栗子,大家一定都用过微信,假设你的微信朋友圈中有若干好友:张三、李四、王五、赵六、七大姑、八大姨。而你七大姑的微信号里,又有若干好友:你、八大姨、Jack、Rose。微信中,许许多多的用户组成了一个多对多的朋友关系网,这...原创 2019-03-22 19:44:37 · 333 阅读 · 0 评论 -
【数据结构】树结构的升华版---2-3树
前言一、2-3 树定义二、2-3 树性质三、2-3树查找四、2-3树插入五、2-3树删除六、结语我们知道二叉搜索树 (BST) 和二叉平衡树 (AVL) ,二叉搜索树在最好的情况下搜索的时间复杂度为 O(logn) ,但如果插入节点时,插入元素序列本身就是有序的,那么BST树就退化成一个线性表了,搜索的时间复杂度为 O(n)。如果想要减少比较次数,就需要降低树的高度。在插入和删除节点时,要保证...原创 2019-12-13 18:16:18 · 150 阅读 · 0 评论 -
【数据结构】图解红黑树
前言一、红黑树定义和性质二、红黑树查找三、红黑树插入四、红黑树删除六、结语七、思考题和习题答案本文将通过图文的方式讲解红黑树的知识点,并且不会涉及到任何代码,相信我,在懂得红黑树实现原理前,看代码会一头雾水的,当原理懂了,代码也就按部就班写而已,没任何难度。阅读本文你需具备知识点:二叉查找树完美平衡二叉树事不宜迟,让我们进入正题吧。红黑树也是二叉查找树,我们知道,二叉查找树这一...原创 2019-12-13 18:20:12 · 245 阅读 · 0 评论 -
【数据结构】高效的多路平衡搜索树---B-树
前言一、引入B树的原因二、B-树的性质三、B-树的结构四、B-树的查找六、B-树的中序遍历B树是为磁盘或其他直接存取的辅助设备而设计的一种多路平衡搜索树,许多数据库系统使用B树或B树的变种来存储信息。一、引入B树的原因前面我们介绍了高效的二叉搜索树AVL树、红黑树,为什么还要出现B树?当你使用AVL、红黑树时,一次只能获取一个键值的信息,鉴于计算机的局部性原理,B树可以至多存储M-1个键值的...原创 2019-12-13 18:17:10 · 244 阅读 · 0 评论 -
【数据结构】再谈堆与优先级队列
前言1. 完全二叉堆2. 最大堆和最小堆3. 源代码及注释4. 优先级队列堆是继栈、队列以及二叉树之后又一个重要的数据结构,堆在底层也是没有自己的容器的,而是通过binary heap这种complete binary tree(完全二叉树)来实现的。下面就堆的实现原理及底层容器作以阐述和实现。1. 完全二叉堆complete binary tree(完全二叉树),整棵树除了最底层的叶节点之...原创 2019-03-23 03:23:48 · 238 阅读 · 0 评论 -
【数据结构】浅析快速排序(QuickSort)
一. 什么是快速排序1.快排的本质快速排序是Koare在1962年提出的一种二叉树结构的交换排序,它实际上是一种对于冒泡排序改进的一种方法。2.快排的思想在待排序序列中任意取一个元素作为基准元素,按照该基准元素将待排序序列分为两个子序列,左边子序列的值都小于基准值,右边子序列的值都大于基准值。然后把左右子序列当做一个子问题,以同样的方法处理左右子序列,直到所有的元素都排列在相对应的位置上...原创 2018-09-28 00:31:06 · 748 阅读 · 0 评论 -
【数据结构】位图与布隆过滤器
一、位图:由题引入:【问题】:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。如果将40亿个数按整型放入内存,显然不科学,就算内存足够,这样做也是浪费空间;排序也一样,存不下;如果用搜索树当然更不行,一个节点有左右孩子,数等,比16G还大,哈希桶也存不下,有一个指针,和数据。这时我们想到直接定址法的哈希,但是直接定地址法的哈希要开整形最大...原创 2018-09-23 02:58:10 · 675 阅读 · 0 评论 -
【数据结构】堆专题总结
专题主要内容 堆的概念、性质 堆的创建 堆的插入&删除 堆的应用堆的概念堆(heap),这里所说的堆是数据结构中的堆,而不是内存模型中的堆。堆通常是一个可以被看做一棵树,它满足下列性质:[性质一] 堆中任意节点的值总是不大于(不小于)其子节点的值; [性质二] 堆总是一棵完全树。将任意节点不大于其子节点的堆叫做小堆或小根堆,而将任意节...原创 2018-09-05 17:28:42 · 778 阅读 · 0 评论 -
【数据结构】动态顺序表
前言: 对于初学数据结构的新手来说,第一步都是从线性表学起,我们都知道线性表是:具有n个数据元素的有限序列,且能进行增删改查操作的一种线性数据结构。而根据数据元素在存储单元中存储的方式不同又分为顺序表与链表。顺序表就是用一段地址连续的存储单元存储数据,我们大多选用的都是数组,而对于数组可分为静态数组与动态数组,所以顺序表又可分为静态顺序表与动态顺序表。今天来一起学习的是:动态顺序表的...原创 2018-06-24 00:02:17 · 595 阅读 · 0 评论 -
【数据结构】单链表相关操作
前言 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。今天来一起学习单链表的相关操作:参考代码:linklist.h:#ifndef __LIST_H__#define _...原创 2018-07-04 23:26:15 · 256 阅读 · 0 评论 -
【数据结构】栈的相关操作
一、栈的定义栈是一种特殊的线性表;栈只能在线性表的一端进行操作。即只允许在栈顶(Top)操作,而不允许在栈底(Bottom)操作。 二、栈的特性由于栈只允许在栈顶(Top)操作,故栈的特性为后进先出(Last In First Out)。如下图所示: 三、栈的操作创建栈 销毁栈 进栈 出栈 获取栈顶元素 判空获取栈的大小 四、栈的实...原创 2018-08-15 21:32:10 · 428 阅读 · 0 评论 -
【数据结构】队列相关操作
一、队列的定义队列是一种特殊的线性表、队列仅在线性表的两端进行操作队头(Front):取出数据元素的一端队尾(Rear):插入数据元素的一端队列不允许在中间部位进行操作二、队列的特性由于队列只允许在极端操作,故栈的特性为先进先出(FIFO) 。如下图所示: 三、队列的操作创建队销毁队进队出队 获取队头元素 判空获取队列的大小 四、队列的实现...原创 2018-08-15 21:34:08 · 229 阅读 · 0 评论 -
【数据结构】时间复杂度和空间复杂度
前言: 时间复杂度与空间复杂度是衡量一个算法的重要标准,统称为算法复杂度。 算法:对于特定问题求解步骤的描述。 特性:输入,输出,有穷性,确定性,可行性。 要求:正确性,可读性,鲁棒性,低存储高效性,简单性。 一个算法存在最好,最差,平均三种情况,但我们通常关注的最坏的情况,理由如下: 一个算法的最坏情况的运行时间是在任意输入下的运行时间上界...原创 2018-08-19 03:16:39 · 412 阅读 · 0 评论 -
【数据结构】带头结点双向循环链表相关操作
链表结构如下:相关操作结构 因为带头结点,所以在任何结点的操作都是一致的,相对单链表来说简单一些。相关操作参考代码DLinkLIst.h:#ifndef __LINKLIST_H__#define __LINKLIST_H__#include <stdio.h>#include <stdlib.h>#include &l...原创 2018-08-19 15:55:38 · 1452 阅读 · 0 评论 -
【数据结构】栈和队列相关面试题
栈和队列面试题(c语言实现) 1.实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间复杂度为O(1). 2.使用两个栈实现一个队列 3.使用两个队列实现一个栈 4.元素出栈、入栈的合法性。如入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1) 5.一个数组实现两个共享栈 1.实现一个栈,要求实现Push(入栈)...原创 2018-08-17 00:02:08 · 550 阅读 · 0 评论 -
【数据结构】二分查找,你真的掌握了吗?
前言 二分查找,最基本的算法之一,也是面试中常被考察的重点,因为基本的算法最能反映出一个人的基础是否扎实。本文对二分查找相关题目做一个总结。二分查找函数实现:int bin_search(int arr[], int n, int key){ int mid = 0; int low = 0, high = n-1; while (low &amp;...原创 2018-06-03 12:52:57 · 1975 阅读 · 0 评论 -
【数据结构】栈应用-迷宫(简单vs进阶)
题目 对于给定条件的迷宫,若只有一条出路,求出口,若有多条出路,求最短路径!迷宫大概可分为三类: 思路对于迷宫问题,我们首先应该有回溯的思想: 回溯算法实际上一个尝试搜索的过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优...原创 2018-08-22 13:21:30 · 961 阅读 · 0 评论 -
【数据结构】二叉树专题总结
专题主要内容: 二叉树的概念 二叉树的性质 二叉树存储方式 二叉树基本操作 二叉树经典面试题 前言:树的定义:树是一种数据结构,它是由n(n&amp;amp;gt;=1)个有限结点组成一个具有层次关系的集合。树具有的特点有:(1)每个结点有零个或多个子结点(2)没有父节点的结点称为根节点(3)每一个非根结点有且只有一个父节点(4)除了根结点外,每个子...原创 2018-08-24 13:57:33 · 1054 阅读 · 0 评论 -
【数据结构】数组实现两个栈即共享栈
前言1.奇偶占位法2.首尾相遇法一个数组实现共享栈是一个经典的算法,这些年也备受笔试/面试的青睐,其核心思想不难,但是对于临界点的把握是比较容易出错的,下面列举出两种常用方法。1.奇偶占位法如下图所示,对stack1进行偶数位压栈,对stack2进行奇数位压栈。top即栈顶,分别指向当前栈中最后一个元素的下一个将要压栈的位置。栈的数据结构较为简单,这里就不对其push、pop等操作过多描述,...原创 2019-03-23 13:21:28 · 535 阅读 · 0 评论