![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 58
小心眼儿猫
这个作者很懒,什么都没留下…
展开
-
C语言实现单链表的增删查改
链表:一种链式存储的线性表,用一组地址任意的存储单元存放线性表的数据元素,称存储单元为一个节点。 链表分类:单链表双链表双向循环链表代码实现单链表的增删查改: linklist.h文件#pragma once#include<stddef.h>typedef char LType;typedef struct LinkNode{ //数据...原创 2018-03-25 15:23:06 · 17560 阅读 · 0 评论 -
回溯法求解简单迷宫(C语言)
前两天学习了栈和队列的相关知识,今天来看一下如何用栈来走出迷宫。 先来一个迷宫:0表示墙(不能走),1表示路(能走)为便于观察我将这里可走的路用红色标记一下 前面收到我们要使用栈的相关知识来走出这个迷宫,下面就正式开始来说一说怎么解决迷宫问题。 方法一:使用函数本身的栈。我们都知道调用一个函数时,该函数都会形成自己的函数调用栈,当函数调用结束返回以后,该栈结构就会随之消失,而这里的调用栈的原创 2018-04-21 11:19:07 · 4159 阅读 · 0 评论 -
单链表的相关面试题(一)
以下内容接《C语言实现单链表的增删查改》有需要者自行戳链接查看 linklist.h文件新增内容//冒泡排序void linklistBubbleSort(LinkNode *head);//找出中间节点LinkNode *FindMidNode(LinkNode *head);//找倒数第K个节点LinkNode *FindLastKNode(LinkNode *head,siz...原创 2018-04-07 13:58:16 · 300 阅读 · 0 评论 -
多通路带环和不带环迷宫求最短路径(C语言)
求解了简单迷宫,接下来我们来看一看多通路的带环和不带环的迷宫求最短路径的问题。 问题一:不带环的多通路迷宫求最短路径 思路: 1、给定一个点,判断该点是否能落脚,不能落脚直接返回 2、能落脚就将这个点标记,并且入栈cur_path,该栈中保存着我们走过的路径 3、判断这个点是否为出口,是出口说明找到了一条路 4、此时cur_path栈中保存着我们走过的这条路,将cur...原创 2018-04-21 22:20:55 · 493 阅读 · 0 评论 -
二叉树基本操作(三)(非递归实现前中后序遍历)
非递归实现前序遍历思路:非递归的前序遍历就比较简单,借助一个栈,将根节点入栈,然后通过循环,取栈顶元素,出栈就可访问当前栈顶元素(也就是当前树的根节点(前序遍历的顺序是VLR)),有先序遍历的顺序规则,在将其右子树入栈,在将其左子树入栈,只需要注意一点,左右子树的入栈顺序一定是先入栈右子树在入栈左子树。(因为我们先序遍历是访问了根节点之后就访问左子树在访问右子树,而栈的特点是后进先出,因此我们要想...原创 2018-05-06 02:06:16 · 555 阅读 · 0 评论 -
数据结构·堆
堆:堆的表现形式其实是一棵完全二叉树,只不过,该完全二叉树中的元素有一些其他的考究。 1、首先堆分为大堆和小堆 2、大堆(小堆):任一节点的关键码大于(小于)等于他的左右孩子的关键码,位于堆顶节点的关键码永远是这棵二叉树中最大(最小)的一个值,从根节点到每个节点的路径上数组元素组成的序列都是递减(递增)的 1、堆存储在下标为0开始的数组中,因此在堆中给定下标为i的点时:...原创 2018-05-12 17:08:38 · 157 阅读 · 0 评论 -
哈希表的基本操作(一):线性探测法解决哈希冲突
哈希概念 在之前学习过的顺序搜索和二叉树搜索中,元素存储位置和元素各关键码之间没有对应关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数。 我们希望可以不经过任何比较,一次直接从表中得到想要的元素,这样一来,搜索效率就有了质的提高。如果构造一种存储结构,通过某种函数是元素的存储位置与他的关键码之间能够建立一一映射的关系,那么在查找的时候通...原创 2018-05-20 18:22:27 · 33484 阅读 · 2 评论 -
哈希表的基本操作(二):哈希桶处理哈希冲突
哈希桶//hash.h文件内容#pragma once#define max_size 1000typedef int KeyType;typedef int ValType;typedef int (*HashFunc)(KeyType key);typedef struct HashElem{ KeyType key; ValType value; ...原创 2018-05-20 18:26:31 · 1409 阅读 · 0 评论 -
二叉搜索树的插入、查找、删除的递归与非递归实现
二叉搜索树: 1、要么为一个空树 2、要么不是一个空树 2.1、如果有左子树,对于该树中的每一个节点来说,该节点的左子树上的所有节点都要比该节点小 2.2、如果有右子树,对于该树中的每一个节点来说,该节点的右子树上的所有节点都要比该节点大下面我们采用递归方法以及非递归方法来实现一下对于二叉搜索树的插入、查找以及删除操作。 1、基本操作:这里的基本操作思路简单,且在...原创 2018-05-16 00:09:29 · 1553 阅读 · 0 评论 -
哈希变形----位图
了解过哈希表,我们接下来看一看哈希表的变形—–位图。 位图:顾名思义就是以bit位为单位,但是需要注意的是我们的位图并不能存储我们的数据,而是借用这样一个结构标记某一个数据是否存在。 如图所示,如果该数据存在,则就将该位图中的相应位从0置为1。 下面我们来实现一下位图的基本操作://以下为bit_map.h文件内容#pragma once#include<stdint.h...原创 2018-05-26 22:06:25 · 323 阅读 · 0 评论 -
排序算法:快速排序和归并排序
快速排序(升序排序):快速排序的核心就是找到一个基准值(我们这里采用最后一个元素作为基准值),然后在剩下的区间里从左往右找到一个大于基准值的数,再从右往左找到一个小于基准值的数然后将二者交换,直到二者相遇一趟排序结束。然后在继续下一趟排序。 //////////////////////////////////////快速排序的递归版本/////////////////////////...原创 2018-06-03 11:37:57 · 477 阅读 · 0 评论 -
单链表的相关面试题(二)
单链表的基础操作:单链表的相关面试题(一) 之前介绍了单链表的基础的增删查改的先关操作,详细信息请戳上文链接查看文章。 接下来我们来解决一些常见的单链表的相关面试题。 linklist.h文件#pragma once#include<stddef.h>typedef char LinkType;typedef struct LinkNode{ Lin...原创 2018-05-02 08:12:03 · 174 阅读 · 0 评论 -
C语言实现链式队列
C语言实现基于顺序表的顺序队列 linkqueue.h文件#pragma oncetypedef char linkType;typedef struct linkNode{ linkType data; struct linkNode *next;}linkNode;//初始化函数void linkQueueInit(linkNode **qhead);...原创 2018-04-14 09:12:53 · 1964 阅读 · 1 评论 -
C语言实现基于链表的链式栈
C语言实现基于顺序表的顺序栈 代码实现: linkStack.h文件#pragma once#include<stddef.h>typedef char linkType;typedef struct linkNode{ linkType data; struct linkNode *next;}linkNode;linkNode *stac...原创 2018-04-13 22:48:51 · 219 阅读 · 0 评论 -
C语言实现顺序栈
栈:是一种特殊的线性表,我们只能对栈 的固定的一端进行插入和删除元素操作。这固定的一端被称之为栈顶,另外一端就叫做栈底。如果一个栈中没有任何元素就将其称为空栈。 特性:先进后出(后进先出) seqstack.h文件#pragma once#include<stddef.h>typedef char seqStackType;typedef struct se...原创 2018-04-07 23:10:50 · 6136 阅读 · 1 评论 -
C语言实现基于顺序表的队列
队列:有且仅有三种操作:入队列,出队列,取队首元素。 只允许从一端进行插入数据操作(入队列),从另一端进行删除数据操作(出队列)或者取队首元素操作。进行插入操作的这一端叫做队尾,进行删除操作的这一端叫做队首。 特点:先进先出代码实现:seqQueue.h文件#pragma once#define Max_Size 100typedef char QueueType;typedef struct原创 2018-04-10 01:21:20 · 550 阅读 · 0 评论 -
实现一个栈:取栈中的最小值的时间复杂度为O(1)
思路:每次入栈前先找到最小的元素(每次有新元素入栈时就将新的元素假设为最小的元素min)(情况1:入栈时,栈内没有任何元素,即是一个空栈。这时候先将要入栈的元素入栈,再紧接着将最小的元素入栈;*情况2*:入栈时栈内已经有元素了,这时候将最小值min与栈顶元素相比较,如果栈顶元素比最小值还要小,则将其赋值给最小值min(min永远是最小的值)。然后先将要入栈的元素入栈再紧接着将最小值入栈。)如此一来...原创 2018-04-15 15:27:56 · 1757 阅读 · 0 评论 -
通过两个栈实现一个队列(C语言)
思路:如下图,我们可以定义两个栈,其中一个input用于实现队列的入队列的操作(就是input栈的入栈),另外一个output用于实现出队列和取队首元素的操作(就是output栈的出栈和取栈顶元素)。 当我们要出队列或者去队首元素时时,因为出队列和取队首元素要从output栈出,所以要先将input中的元素移到output中(而且谁最后入栈,就先把谁移到output中,这样一来,后入栈(后入队原创 2018-04-16 00:33:34 · 3099 阅读 · 0 评论 -
C语言实现双向链表的增删查改
定义一个带头节点的双向链表需要一个数据域两个指针域,其中一个next指针是指向当前节点的下一个节点,另外一个prev指针是指向当前节点的前一个节点。如下图所示: 该头结点本质上只是一个傀儡节点并无实际用处,带头节点的好处就是我们在实际操作链表时不用考虑头指针的指向。而双向链表的前后指针域也大大方便了我们对于链表的实际操作。 代码示例: DBlinklist.h文件#pragma ...原创 2018-04-03 22:35:04 · 3472 阅读 · 2 评论 -
通过两个队列实现一个栈(C语言)
stackBy2Queue.h文件#pragma once#define max_size 1000typedef char DataType;typedef struct Queue{ DataType data[max_size]; int head; int tail; //队列中有效元素个数 int size;}Queue;...原创 2018-04-16 23:42:01 · 9613 阅读 · 1 评论 -
通过一个数组实现两个栈(C语言)
通过一个数组实现的两个栈也叫作共享栈。我们可以将一个数组一分为二,供两个栈使用。 也有另外一种虽然也是讲一个数组一分为二供两个栈使用,但在具体实现上有所不同。 牢记栈1的区间是[0,top1)的左闭右开区间,栈2的区间是[top2,max_size)的左闭右开区间。其中的top1位置并不存放栈1的值,而max_size是数组的边界值也取不到。 正式由于两个栈的区间的取值,所以当top1与...原创 2018-04-17 20:06:01 · 2449 阅读 · 0 评论 -
判断元素出栈入栈顺序的合法性(C语言)
题意:假设有字符串1**abcde**和字符串2**bceda**,试判断是否能以字符串1的入栈顺序得到字符串2的出栈顺序。思路: 步骤1:先将字符串1的第一个字符入栈: 步骤2:将该元素与字符串2的下一个元素进行比较 步骤3: a):如果相等,就将该元素出栈并且将字符串1的下一个字符入栈,与字符串2的下一个字符进行比较。 b):如果不相等,继续将字符串1的...原创 2018-04-17 20:43:50 · 5941 阅读 · 0 评论 -
二叉树及其基本操作(一)(C语言递归实现前中后层序遍历)
树的概念: 由N(N>=0)个节点构成的集合,对于N>1的树,有: 1、有一个特殊的节点,称为根节点,根节点没有前驱节点 2、除根节点外其余节点被分成M(M>0)个互不相交的集合T1,T2……Tm,其中每一个集合Ti(1<=i<=m) 是一棵结构与树类似的子树,每棵子树的根节点有且只有一个前驱,可以有0个或多个后继因此,树是递归定义的。...原创 2018-04-30 12:10:43 · 1659 阅读 · 0 评论 -
二叉树及其基本操作(二)(C语言)
前面我们知道了二叉树的相关概念和性质,也了解了二叉树的相关遍历方法,接下来我们来实现一下其他的有关二叉树的相关基本操作。二叉树及其基本操作(一)(C语言递归实现前中后层序遍历)//求二叉树节点个数int TreeSize1(TreeNode *root){ if(root == NULL) { //空树 return 0; } ...原创 2018-04-30 14:31:55 · 220 阅读 · 0 评论 -
哈希变形----布隆过滤器
在上一篇文章中我们实现了位图的基本操作,现在我们已经知道位图是用来标记某一个数据是否存在,而今天我们要说的布隆过滤器则是另外一种变形应用,通过布隆过滤器我们可以判断一个字符串是否存在于某一对数据中。与位图相比稍有不同的是这里我们可以将数据插入到布隆过滤器(像哈希表一样)中,通过两个哈希函数从而得到两个哈希地址,将这两个哈希地址同时标记为1,就代表该数据被插入到该布隆过滤器中(不是真的将数据插入),...原创 2018-05-27 20:56:11 · 310 阅读 · 0 评论