数据结构
qq_41027326
共同努力,共同进步
展开
-
单链表的实现
1.单链表的介绍 单链表链存储结构的存储分配以节点为单位,每个节点由节点数据和指针构成.单链表的结点通常定义成两个域:结点数据和指针域.。此篇文章先来讨论不带头结点不带环的链表 (1)初始化链表 初始化一个链表也就是表示一个空链表,而要表示一个空链表,那就直接让这个链表所对应的头指针指向空即可 ...原创 2018-03-22 16:04:06 · 285 阅读 · 0 评论 -
两个栈实现一个队列
利用两个栈实现一个队列思路是这样的. 首先这个队列包含两个栈, 然后一个栈用来入队列, 一个栈用来出队列typedef struct QueBy2Stack{ SeqStack input; SeqStack output;}QueBy2Stack; 1. 初始化void QueBy2StackInit(QueBy2Stack* stack){...原创 2018-04-14 08:12:29 · 175 阅读 · 0 评论 -
两个队列实现一个栈
用两个队列实现一个栈的原理是这样的. 规定两个队列, 必须有一个队列是非空, 一个队列是空.每次入栈时必须往非空队列中入, 而每次出栈时, 必须将非空队列里的元素装到空队列中, 直到非空队列中只有一个元素时, 此时就将剩下的这个元素出栈即可. 而取栈顶元素时, 和出栈一样, 先将非空队列中的元素先装到空队列中, 直到非空队列中只有 一个元素时, 此时就将这个元素去取出来, 然后将其插入到空...原创 2018-04-14 08:33:47 · 117 阅读 · 0 评论 -
二叉树的基本操作
数据结构在此过程中我们采用孩子表示法, 即一个结点有一个数值data, 有一个指向左孩子节点, 一个指向右孩子的节点指针typedef struct TreeNode { TreeNodeType data; struct TreeNode* lchild; struct TreeNode* rchild; } TreeNode; 初始化初始化一...原创 2018-04-28 20:06:54 · 157 阅读 · 0 评论 -
树的相关笔试面试题
1. 树的创建已知一个先序遍历数的结果用数组表示, 其中空节点用 null_node 表示, 要求创建出这棵树. 同样采用递归的思想, 先定义一个指针, 指向数组中的第一个元素, 然后给数组的第一个结点创建相应的结点, 然后指针后移, 递归创建根节点的左子树, 递归创建根节点的右子树, 最后返回这个新结点就可以了TreeNode* TreeCreate(TreeNodeType array...原创 2018-04-28 21:00:54 · 642 阅读 · 0 评论 -
堆的基本操作
堆的数据结构对于堆, 有最大堆和最小堆, 在定义一个堆的时候用一个数组表示堆, 同时为了方便定义堆的大小, 用一个 size 表示堆的有效元素, 同时为了区别最大堆和最小堆, 我们用一个函数指针表示这个堆是最大堆还是最小堆.typedef int (*Compare)(HeapType parent, HeapType child); typedef struct Heap { ...原创 2018-05-14 16:35:30 · 160 阅读 · 0 评论 -
二叉树的相关操作
二叉树的数据结构typedef char SearchTreeType; typedef struct SearchTreeNode{ SearchTreeType key; // 关键码 struct SearchTreeNode* lchild; struct SearchTreeNode* rchild; } SearchTreeNode; ...原创 2018-05-14 16:58:39 · 149 阅读 · 0 评论 -
哈希表1
1. 初始化void HashInit(HashTable* ht, HashFunc func){ if(ht == NULL || func == NULL) { return; } ht -> size = 0; ht -> func = func; int i = 0; for(; i < ...原创 2018-05-31 21:16:42 · 186 阅读 · 0 评论 -
哈希表2
哈希表的初始化void HashInit(HashTable* ht, HashFunc func){ if(ht == NULL) { return; } ht -> size = 0; ht -> func = func; size_t i = 0; for(; i < MaxSize; i++)...原创 2018-05-31 21:21:11 · 129 阅读 · 0 评论 -
位图
相关数据结构typedef uint64_t BitmapType;#define BITMAPMAXSIZE 1000 //位图所能容纳的位数typedef struct Bitmap{ uint64_t* data; uint64_t capacity;}Bitmap;初始化void BitmapInit(Bitmap* bm, uint64_t c...原创 2018-05-31 21:26:41 · 173 阅读 · 0 评论 -
布隆过滤器
相关数据结构#define BloomHashCount 2typedef uint64_t (*BloomHash)(const char* str);typedef struct BloomFilter{ Bitmap bm; BloomHash bloom_hash[BloomHashCount];}BloomFilter;初始化void B...原创 2018-05-31 21:40:38 · 146 阅读 · 0 评论 -
排序
冒泡排序void Swap(int*a, int* b){ int tmp = *a; *a = *b; *b = tmp;}void BubbleSort(int array[], int size){ if(size <= 1) { return; } int bound = 0; for(; ...原创 2018-05-31 21:45:32 · 165 阅读 · 0 评论 -
最小栈的实现
所谓最小栈, 就是当前栈顶元素最小, 我们可以这样做, 每次在入栈之前, 将待入栈元素与栈顶元素相比, 每次现将待入栈的元素先入栈, 再将带入栈的元素和较小的元素入栈, 这样就可以保证每次栈顶元素是最小元素. 在出栈的时候规定每次出栈两个元素,这样就可以保证在出栈之后栈顶元素任然是最小元素 1. 最小栈的初始化#include"ministack.h"void Mini...原创 2018-04-14 07:57:32 · 499 阅读 · 0 评论 -
带环迷宫求最短路径
前面介绍了简单的迷宫求解问题, 今天我们就对带环迷宫求出它的最短路径1.首先来看一个带环迷宫的简单地图 在这张迷宫地图中,我们规定入口点的位置entry的坐标是 (0, 1), 同时, 我们给入口点传一个非法坐标,作为入口点的前一个位置(-1, -1). 接下来的思路就和上一篇的思路是一样的的了. 即每次判断当前...原创 2018-04-19 11:21:30 · 388 阅读 · 0 评论 -
求解迷宫最短路径
1. 多通路迷宫初始化 先构建一个多通路迷宫,并且对其初始化void MazeInitShortPath(Maze* maze){ if(maze == NULL) { return; } int row = 0; int col = 0; for(; row < MAX_COL; row++) {...原创 2018-04-18 23:19:36 · 852 阅读 · 0 评论 -
静态顺序表的实现
实现对顺序表的初始化,头插,头删,尾插,尾删, 任意下标的删除, 任意下标处的的元素删除,任意下标处的元素插入,任意元素的下标返回,任意下标处的元素返回, 删除某个元素, 删除线性表中的所有元素,对线性表判空处理, 以及检查线性表有几个元素 1.定义一个线性表 所谓的线性表就是一段地址连续的存储单元一次存储数据元素的线性结构,而连续的地址空间采用数组的结构...原创 2018-03-15 18:36:10 · 300 阅读 · 0 评论 -
顺序表实现栈相关操作
1.栈的相关概念 栈是一种特殊的线性表, 其中只允许在固定的一端进行插入和删除元素.进行数据插入和删除的一端叫做栈顶, 另一端成为栈底. 不含任何元素的栈称为空栈, 栈又称为先进先出的线性表.2. 顺序栈的结构3. 顺序栈的具体操作 (1). 数据结构typedef char SeqStackType;typedef struct SeqStack...原创 2018-04-07 22:21:06 · 195 阅读 · 0 评论 -
双向带环带头结点的链表实现栈
1. 数据结构 利用带头结点带环的结点实现栈的相关操作.因此, 每一个结点包括了一个前驱, 一个后继, 还有一个数据成员typedef char DLinkStackType;typedef struct DLinkStack{ DLinkStackType data; struct DLinkStack* next; struct DLinkSta...原创 2018-04-08 19:07:37 · 171 阅读 · 0 评论 -
顺序表实现队列
一. 队列相关概念 队列是只允许在一段进行插入元素, 在另一端进行删除元素的线性表,即只允许对队列进行尾插,头删的操作.队列具有先进先出, 后进后出的特性. 1.初始化void SeqQueInit(SeqQue* q){ if(q == NULL) { return;//非法输入 } q ->...原创 2018-04-08 21:46:25 · 423 阅读 · 0 评论 -
链表实现队列
上篇博客是用顺序表实现队列, 现在用双向带头结点带环链表实现对队列的出队列, 入队列, 取队首元素, 以及销毁队列的相关操作 1.初始化链表void DLinkQueInit(DLinkQue** q){ if(q == NULL) { return;//非法输入 } if(*q == NULL) { r...原创 2018-04-09 12:06:18 · 457 阅读 · 0 评论 -
链表相关笔试面试题
1.判断两个链表是否相交 两个链表是否相交可分为以下几种情况 (1)两个链表都不带环,此时两个链表所对应的最后一个节点是相等的 (2)两个链表一个带环,一个不带环,两个链表一定不相交 (3)连个链表都带环,如果相交则可以分为以下三种情况 1)两个链表在环外相交, 此时链表1 和链表2 对应的环的入口地址是相等的 2)两个链表在换上...原创 2018-04-02 12:12:58 · 1185 阅读 · 0 评论 -
判断字符串出栈合法性
先来看说一下思路 接下来就是写代码了int StackOrder(SeqStack* stack, char* input, char* output, int size_input, int size_output){ if(stack == NULL || input == NULL || output == NULL) { return...原创 2018-04-15 11:05:02 · 207 阅读 · 0 评论 -
共享栈
1.定义 所谓共享栈就是利用一个数组实现两个栈. 先来看一下共享栈的数据结构typedef struct SharedStack{ int top1; int top2; SeqStackType* data;}SharedStack;2. 初始化void SharedStackInit(SharedStack* stack){ ...原创 2018-04-15 11:21:04 · 706 阅读 · 0 评论 -
单链表的相关操作
1.冒泡排序对单链表进行排序void LinkListBubbleSort(LinkNode* head){ if(head == NULL) { return;//空链表 } if(head -> next == NULL) { return;//只有一个结点 } ...原创 2018-03-28 16:02:35 · 154 阅读 · 0 评论 -
迷宫求解(递归)
首先来看一下迷宫简易图 我们用 0 来表示该位置是墙, 用 1 来表示该位置是路. 所以, 我们在处理迷宫问题的时候可以将其看成一个二维数组即可, 而对应的每一条路我们可以用坐标的形式将其表示, 所以还需要有一个结构体来描述对应的点的 1. 相关数据结构typedef struct Maze { int map[...原创 2018-04-17 08:20:11 · 4161 阅读 · 0 评论 -
迷宫求解(非递归)
上篇文章写出了利用函数形成栈桢的特性完成迷宫求解问题, 本篇文章我们自己手动维护一个栈, 其进行出栈, 入栈, 取栈顶元素, 来完成迷宫求解寻路的过程 思路和以前一样, 首先, 我们先定义一个栈, 对其初始化, 同时, 定义一个迷宫地图, 对该地图进行初始化, 先判断当前位置是否可以落脚, 如果不能落脚就直接 return, 如果能够落脚, 就将入栈同时将其标记, 标记完之后就循...原创 2018-04-17 08:36:21 · 1116 阅读 · 0 评论 -
双向链表的基本操作
1.双向链表的数据结构typedef char DLinkType;typedef struct DLinkNode { DLinkType data; struct DLinkNode* next; struct DLinkNode* prev; }DLinkNode; 双向带头结点的链表有三个成员, 一个是数据, 一个是指针 next ...原创 2018-04-05 13:28:05 · 329 阅读 · 0 评论 -
排序
排序1.冒泡排序冒泡排序较为简单,总体思路如下 void Swap(int*a, int* b){ int tmp = *a; *a = *b; *b = tmp;}void BubbleSort(int array[], int size){ if(size &amp;lt;= 1) { return; } ...原创 2018-06-24 23:18:57 · 135 阅读 · 0 评论