数据结构
文章平均质量分 84
Cecilia3333
这个作者很懒,什么都没留下…
展开
-
求带环的多出口迷宫的最短路径
在前面的博客中,我们已经解决了简单迷宫的求解问题以及多出口(不带环)迷宫求最短路径的问题。求带环的多出口迷宫的最短路径,需要我们在之前解决问题的思想上做出调整和改进。首先,我们先来定义一个带环的多出口迷宫: 图中黄色标记为一个环,0表示墙,即无法落脚;1表示可以落脚;之后我们会用2来标记走过的路。我们默认出口为四个边界上的点。若入口也为边界点,则出口与入口不能重合...原创 2018-04-17 16:28:58 · 429 阅读 · 0 评论 -
二叉树的基本操作
创建树节点TreeNode* CreateTreeNode(TreeNodeType value){ TreeNode* new_node = (TreeNode*)malloc(sizeof(TreeNode)); new_node->data = value; new_node->lchild = NULL; new_node->rchild ...原创 2018-05-04 23:41:30 · 261 阅读 · 0 评论 -
二叉树相关面试题
树的先序遍历(非递归版本)void TreePreOrderByLoop(TreeNode* root){ if(root == NULL) return; //1.先将根节点入栈 SeqStack stack; SeqStackInit(&stack); SeqStackPush(&stack,root); //2....原创 2018-05-04 23:52:37 · 186 阅读 · 0 评论 -
堆的基本操作
堆(heap)也被称为优先队列(priority queue)。队列中允许的操作是先进先出(FIFO),在队尾插入元素,在队头取出元素。而堆也是一样,在堆底插入元素,在堆顶取出元素,但是堆中元素的排列不是按照到来的先后顺序,而是按照一定的优先顺序排列的。这个优先顺序可以是元素的大小或者其他规则。堆可以分为最大堆和最小堆。 最大堆满足:(1)根节点为最大值;(2)父节点大于子节点。 ...原创 2018-05-14 17:24:12 · 243 阅读 · 0 评论 -
哈希表(1)
哈希表也称散列表,是根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。哈希表的查找速度非常快,几乎是O(1)的时间复杂度。下面我们实现的哈希表期望存储的数据是键值对的结构。头文件:hash.h:#pragma once#include<stdio.h>#include<stddef.h>#define ...原创 2018-05-19 20:59:42 · 245 阅读 · 0 评论 -
二叉搜索树的基本操作
二叉搜索树又称二叉排序树,具有以下性质: 1.若它的左子树不为空,则左子树上所有节点的值均小于根节点的值; 2.若它的右子树不为空,则右子树上所有节点的值均大于根节点的值。如下图所示结构即为一个二叉搜索树: 二叉搜索树的基本操作:#pragma once#include<stdio.h>#include<stdlib.h>#...原创 2018-05-15 20:20:05 · 204 阅读 · 0 评论 -
哈希表拓展——位图
位图的基本概念位图 就是bitmap的缩写,是用每一位来存放数的状态的结构,适用于大规模的数据。位图的用处位图主要用于海量数据处理,索引,数据压缩等方面。位图的结构位图的结构类似于哈希表,位图就是用每一位的0或1来表示一个数的状态。例如,我们现在有一个文件,这个文件中有数字1,3,5.我们就可以把第1位、第3位、第5位的状态设置为1,其余位为0。 位图...原创 2018-05-22 14:49:20 · 711 阅读 · 0 评论 -
哈希表拓展——布隆过滤器
布隆过滤器的基本概念布隆过滤器是由bitmap和几个hash函数实现的,主要用于检查一个元素是否存在与一个集合中。布隆过滤器的优缺点优点:查找时间和快空间效率都优于其他的算法;缺点:有误错率。可能你要查找的元素并不存在,但是以前插入的数据刚好将你的key经过几个映射函数的bit位置为1,这就造成一种假象,你要查找的数据存在。直觉上判断这种情况发生的概率还是比较低的,能想到的就是当你的数据量很大的时...原创 2018-05-22 15:17:23 · 302 阅读 · 0 评论 -
排序算法的实现
冒泡排序重复的走访过要排序的数列。一次比较两个元素,如果他们的顺序错误,就把他们交换过来。走访数列的工作是重复的进行,直到没有再需要交换的元素,即该序列已经排序完成。 void Swap(int* a,int* b){ int tmp = *a; *a = *b; *b = tmp;}void BubbleSort...原创 2018-05-27 11:23:47 · 245 阅读 · 0 评论 -
海量处理问题的解决方案
1. 给定一个大小超过 100G 的文件, 其中存在 IP 地址, 找到其中出现次数最多的 IP 地址(hash文件切分) 2. 给定100亿个整数, 找到其中只出现一次的整数(位图变形, 用两位来表示次数). 3. 有两个文件, 分别有100亿个query(查询词, 字符串), 只有1G内存, 找到两个文件的交集(hash文件切分 + 布隆过滤器). 4. 给上千个文件, 每个文件大小为1K -...原创 2018-05-28 03:46:03 · 381 阅读 · 0 评论 -
海量数据处理:十道面试题与十个海量数据处理方法总结
说明:本文分为俩部分,第一部分为10道海量数据处理的面试题,第二部分为10个海量数据处理的方法总结。出处:http://blog.csdn.net/v_JULY_v。---------------------------------------------------------------------------------------------------------------------...转载 2018-05-28 03:55:12 · 342 阅读 · 0 评论 -
get一种简单重建二叉树的方法
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。代码:/** * Definition for binary tree * struct TreeNode { * int v...原创 2018-07-30 15:01:55 · 201 阅读 · 0 评论 -
顺序表的实现(1)
实现基于静态数组的顺序表的以下基本操作: 1. 初始化 2. 尾插 3. 尾删 4. 头插 5. 头删 6. 修改任意位置元素 7. 在任意位置插入元素 seqlist.h#pragma once#include<stddef.h>#include<stdio.h>#include<stdlib.h>#define SeqlistMaxSize 20...原创 2018-03-13 12:34:02 · 328 阅读 · 0 评论 -
顺序表的实现(2)
实现基于静态数组的顺序表的以下基本操作:1.查找任意下标元素的值2.给任意位置的元素设定值3.查找对应值的下标4.删除顺序表中指定的值,如果存在重复元素,只删除第一个5.删除顺序表中所有的指定的值,另外要实现一个时间复杂度为O(N)的优化版本6.获取顺序表元素个数7.判定顺序表是否为空8.普通的冒泡排序9.利用回调函数进行冒泡排序seqlist.h#include<stddef.h>...原创 2018-03-16 16:35:08 · 283 阅读 · 1 评论 -
求解多出口迷宫最短路径的问题
求解多出口迷宫的最短路径,是在基于求解简单迷宫是否存在路径的问题的基础上的一个提高。我们首先需要认识到的是,不论是求解简单迷宫问题,还是复杂迷宫的问题,我们都需要基于栈,使用回溯法来解决问题。首先,我们先来定义一个多出口的迷宫: 图中0表示墙,即无法落脚;1表示可以落脚;之后我们会用2来标记走过的路。我们默认出口为四个边界上的点。若入口也为边界点,则出口...原创 2018-04-17 14:46:35 · 1315 阅读 · 0 评论 -
简单迷宫的问题求解
回溯法:对一个包括有很多个结点,每个结点有若干个搜索分支的问题,把原问题分解为若干个子问题求解的算法;当搜索到某个结点发现无法再继续搜索下去时,就让搜索过程回溯(回退)到该节点的前一个结点,继续搜索该节点外的其他尚未搜索的分支;如果发现该结点无法再搜索下去,就让搜索过程回溯到这个结点的前一结点继续这样的搜索过程;这样的搜索过程一直进行到搜索到问题的解或者搜索完了全部可搜索分支没有解存在为止。首先我...原创 2018-04-17 14:22:26 · 310 阅读 · 0 评论 -
栈和队列面试题
实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间复杂度为O(1) 解题思路:将每个元素入栈两次,第一次表示要入栈的元素value,第二次表示当前栈中的最小值min。 代码实现:我们还是要基于栈的基本操作的实现来编写这个代码。一个元素插入两次,一次表示入栈元素value,一次表示当前栈中的最小值min。需要注意的是,在入栈时,应当先入value,再入min...原创 2018-04-15 21:06:51 · 168 阅读 · 0 评论 -
迷宫求解的递归式求法
maze.h:#include <stdio.h>#define MAX_ROW 6#define MAX_COL 6typedef struct Maze{ int map[MAX_ROW][MAX_COL];}Maze;typedef struct Point{ int row; int col;}Point;void MazeInit(...原创 2018-04-13 23:58:48 · 244 阅读 · 0 评论 -
基于链表实现队列
在上一篇博客中,我们实现了顺序队列的编写。现在我们来实现链式队列的编写。linkqueue.h:#pragma once#include<stdio.h>#include<stdlib.h>#include<stddef.h>typedef char LinkQueueType;typedef struct LinkNode{ LinkQ...原创 2018-04-10 23:40:26 · 399 阅读 · 0 评论 -
基于顺序表实现队列
队列是一种先进先出(FIFO)的特殊线性表。它只允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端叫做队尾,允许删除的一端则称为队头。队列的基本操作也有三种,分别为:入队列、出队列、取队首元素。seqqueue.h:#pragma once#include<stdio.h>#include<stdlib.h>#include<stddef...原创 2018-04-10 22:47:46 · 334 阅读 · 0 评论 -
基于链表实现栈
在上一篇博客中,我们介绍了栈的概念、特点,也用代码实现了顺序栈。在这篇博客中,我们将基于链表来实现栈,即链式栈。linkstack.h:#pragma once#include<stdio.h>#include<stdlib.h>#include<stddef.h>typedef char LinkStackType;typedef stru...原创 2018-04-10 21:33:41 · 148 阅读 · 0 评论 -
基于顺序表实现栈
栈是一种后进先出(LIFO)的特殊的线性表。它限定仅在表尾进行插入或删除,表尾端被称作栈顶,表头端称作栈底。不含元素的空表称为空栈。栈的基本操作有三个,分别为:入栈、出栈。取栈顶元素。下面,我们先来基于顺序表实现栈,即顺序栈。seqstack.h:#pragma once#include<stdio.h>#include<stdlib.h>#include<...原创 2018-04-10 21:26:17 · 406 阅读 · 0 评论 -
带头结点带环的双向链表的基本操作
首先,我们来认识一下带头结点带环的双向链表的结构:通过对链表结构的认识,我们可以归纳出,在代码的实现过程中需要注意的是: 在进行插入节点操作的时候:(1)创建一个节点时,要对四个指针进行修改;(2)进行节点删除操作的时候,只需修改两个指针,释放要删节点的空间即可。 下面我们来一一介绍链表的基本操作。首先定义链表的头文件slb.h:#include <stdio.h>#include&...原创 2018-04-03 20:58:16 · 217 阅读 · 0 评论 -
单链表的经典面试题
在之前的文章中,我们已经介绍过了单链表的基本功能的代码实现,下面我们就基于基本的功能,来实现一些关于单链表的经典面试题的代码编写。linklist.h#include<stdio.h>#include<stdlib.h>#include<stddef.h>typedef char LinkNodeType;typedef struct LinkNod...原创 2018-04-01 21:46:13 · 256 阅读 · 0 评论 -
单向链表的基本操作
linklist.h#include<stdio.h>#include<stdlib.h>#include<stddef.h>typedef char LinkNodeType;typedef struct LinkNode{ struct LinkNode* next; LinkNodeType data;}LinkNode;void ...原创 2018-03-25 14:53:55 · 235 阅读 · 0 评论 -
哈希表(2)
在上一篇博客中,我们实现了一种哈希表,现在我们基于哈希桶来实现哈希表的基本操作。hash.h:#pragma once#include<stdio.h>#include<stdlib.h>#include<stddef.h>#define HashMaxSize 1000typedef int KeyType;typedef int...原创 2018-05-21 22:11:45 · 185 阅读 · 0 评论