
数据结构
文章平均质量分 67
Nessie_zhao
这个作者很懒,什么都没留下…
展开
-
简单的排序算法
常见的排序算法有以下7种:冒泡排序选择排序插入排序堆排序希尔排序归并排序快速排序我们通常说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序排序算法大体可分为两种: 1.一种是比较排序,时间复杂度为O(nlogn)~O(n^2),主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等 2.另一种是非比较排序,时间复杂度可以达到O(n) 除了排...原创 2018-05-30 15:01:10 · 352 阅读 · 0 评论 -
位图和布隆过滤器
首先理解一下什么是位图什么是布隆过滤器??位图:用来快速判断一个整数是否在一堆整数中布隆过滤器:用来判断一个字符串是否在一堆字符串里下面对布隆过滤器进行一些详细的解释布隆过滤器其实是结合了位图与哈希表,先将字符串用字符串哈希算法映射到哈希表中,但是由于哈希冲突,我们可以一个字符串使用多个不同的字符串哈希算法同时映射在整个哈希表中,判断一个字符串是否在这堆字符串中,我们可以算出这个字符串...原创 2018-05-28 16:45:02 · 1029 阅读 · 0 评论 -
哈希表的初步认知
首先我们来认识一下什么是哈希表?? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(...原创 2018-05-28 14:20:45 · 573 阅读 · 0 评论 -
堆的相关操作
要对堆进行操作首先应该清楚什么是堆?堆:是计算机科学中一类特殊的数据结构的统称,堆通常是一个可以被看做一棵树的数组对象。堆的性质:堆的某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树堆有大堆小堆之分,根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆的定义如下:n个元素的序列{k1,k2,...,kn}当且仅当满足以下关系时,称之...原创 2018-05-18 14:26:54 · 287 阅读 · 0 评论 -
二叉树的常见笔试面试题
在二叉树的基本操作里已经说明如何用递归的方法进行二叉树的遍历,那么如何用非递归的方法来进行二叉树的遍历呢,请看下文1.使用非递归方式进行二叉树的先序遍历 思想:定义两个栈,一个栈存放当前路径。一个栈存最短路径,每次都将当前路径和最短路径比较如果当前路径小于最短路径,那就交换两个栈中的元素 代码实现:void MazeInit2(Maze* maze){ if(maze == NULL) { return; } int map[MAX_R原创 2018-05-05 22:15:09 · 4287 阅读 · 0 评论 -
迷宫---是否存在路径
迷宫求解问题已经是比较经典的题,下面就用两种方法实现迷宫求解问题迷宫求解的思想是回溯法,那什么是回溯法??? 对一个包括有很多个节点,每个节点有若干个搜素分支的问题,把原问题分解为若干个子问题求解的算法;当搜索到某个节点发现无法再继续搜素下去时,就让搜索过程回溯(回退)到该节点的前一个节点,继续搜索该节点外的其他尚未搜索的分支;如果发现该节点无法再搜索下去,就让搜索过程回溯到这个节点的前一节点继续原创 2018-05-05 21:41:19 · 531 阅读 · 0 评论 -
二叉树的基本操作
首先我们来了解一下什么是二叉树 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树的特点: 1.每个节点最多有两棵子树,即二叉树不存在度大于2的节点 2.二叉树的子树有左右之分,其子树的顺序不能颠倒 3.满二叉树: 在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子节点都在同一层上原创 2018-04-29 15:58:32 · 644 阅读 · 0 评论 -
栈和队列的相关笔试面试题
在程序中引用的“seqstack.h”文件和“seqqueue.h”可以参见https://blog.csdn.net/Nessie_zhao/article/details/79917049 https://blog.csdn.net/Nessie_zhao/article/details/798344041.实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度原创 2018-04-17 22:43:24 · 428 阅读 · 0 评论 -
顺序队列与链式队列
队列首先介绍一下什么是队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另原创 2018-04-12 18:17:04 · 3737 阅读 · 0 评论 -
顺序栈与链式栈
栈首先先对栈做简单的认识:栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个原创 2018-04-10 18:13:16 · 605 阅读 · 0 评论 -
双链表的一些简单操作
双向链表的初始化、尾删、尾插、头删、头插、查找、删除、插入、销毁等操作原创 2018-04-04 17:31:42 · 194 阅读 · 0 评论 -
链表常见笔试题
1.逆置/反转链表 2.单链表排序(冒泡排序)有2种方法,第一种参数是LinkNode** ----两个结构体交换位置,交换链表节点 第二种参数是LinkNode* ----交换结构体内的值在这里我们采用的是第二种方法较为简单3.合并两个有序链表,合并后依然有序4.查找单链表的中间节点,要求只能遍历一次链表5.查找单链表的倒数第k原创 2018-04-03 19:29:03 · 293 阅读 · 0 评论 -
单链表的一些操作
LinkList.h#pragma oncetypedef char LinkNodeType;typedef struct LinkNode{ LinkNodeType data; struct LinkNode* next;}LinkNode;typedef LinkNode* PLinkNode;void LinkNodeInit(LinkNode** node);原创 2018-03-24 09:14:57 · 213 阅读 · 0 评论