C语言
文章平均质量分 73
L_X_Y_HH
这个作者很懒,什么都没留下…
展开
-
栈和队列的一些笔试题(2)
问题4:元素出栈、入栈顺序的合法性问题5:共享栈(一个数组实现两个栈)问题4:元素出栈、入栈顺序的合法性问题分析:首先先创建一个栈,有两个数组,分别为input和output,分别表示入栈的元素,和要出栈的元素,先将input的元素循环入栈,然后取栈顶元素与output_index做比较,若栈顶元素不等于output_index,则循环结束,让下一个input元素入栈,若output_index等...原创 2018-04-16 16:41:02 · 212 阅读 · 0 评论 -
布隆过滤器
1.初始化 8 void BloomFilterInit(BloomFilter* bf) 9 { 10 if(bf == NULL) 11 { 12 return ; 13 } 14 BitmapInit(&bf->bm,BitmapMaxSize); 15 bf->bl...原创 2018-06-15 14:35:17 · 180 阅读 · 0 评论 -
基于C语言实现位图
之前写过哈希表的一些操作,下面来介绍哈希表的一种变形——位图位图是用来表示数字是否存在的情况位图的优点是能够节省很多空间,但是缺点就是只能够表示数字是否存在...原创 2018-06-15 14:26:28 · 3227 阅读 · 0 评论 -
基于C语言实现哈希表(开散列)
上一篇博客写了基于线性探测实现哈希表的一些方法,但若是负载因子较大时,哈希表的查找数据效率还是会很低,下面将使用开散列来实现哈希表的一些操作开散列又称为链地址法(开链法)首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个集合称为一个桶,桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中例如:数据集合{10,51,14,33,18,29},哈希函数Hash...原创 2018-05-29 10:38:21 · 2712 阅读 · 0 评论 -
基于C语言实现哈希表(线性探测)
之前在写过的很多的结构中都实现过搜索功能,但是不论是顺序搜索还是搜索二叉树,由于元素的存储位置和元素各关键码之间没有对应的关系,所以在查找一个元素的时候必须要经过关键码的多次比较。因此搜索的时间复杂度很难能够达到O(1)。但是如果有一种存储结构,通过某种函数使元素的存储位置与他的关键码之间能够建立一一映射的关系,那么就能够直接地查找到需要地元素,时间复杂度就达到了O(1),那么这种结构就是哈希表。...原创 2018-05-28 17:24:26 · 3201 阅读 · 0 评论 -
二叉树的一些常见基本面试题
1.使用非递归地方式来完成二叉树的先序、中序、后序遍历(1)使用非递归地方式来完成二叉树的先序遍历通过栈来实现首先先将根节点入栈,然后循环,取出栈顶元素为当前元素,并打印当前元素,再将当前元素的右子树和左子树先后入栈,再重复之前的操作,直到栈为空,循环结束,详细操作见图(竖向来看)340 //先序341 void TreePreOrderByLoop(TreeNode* root)342 {...原创 2018-05-13 18:30:03 · 380 阅读 · 0 评论 -
基于C语言实现二叉搜索树
二叉搜索树的特点是左子树<根节点<右子树,并且任何节点的左右子树的高度差不超过1,搜索二叉树与满二叉树无关,只要满足上面的条件即可1.初始化操作此时传入的为根节点的指针的指针 40 //初始化 41 void SearchTreeInit(SearchNode** pRoot) 42 { 43 if(pRoot == NULL) 44 { 45 ...原创 2018-05-13 16:48:44 · 262 阅读 · 0 评论 -
基于C语言实现堆的一些操作
堆是一个完全二叉树,堆分两种,一种为小堆,一种为大堆小堆是指对于这个树的任意任意一个子树来说,子树的根节点都要小于左右孩子节点的值,小堆的根节点是这个树的最小元素大堆是指对于这个树的任意任意一个子树来说,子树的根节点都要大于左右孩子节点的值,大堆的根节点是这个树的最大元素1.对堆进行初始化操作其中有一个比较函数Compare,来比较确定是大堆还是小堆 16 //初始化,决定是大堆还是小堆 17 ...原创 2018-05-13 16:18:10 · 1064 阅读 · 0 评论 -
基于C语言实现迷宫
说到迷宫,首先一定要有一个迷宫的地图,让后还要规定寻找迷宫出口的一些规则关于迷宫的地图,在这里我创建了一个二维数组来表示迷宫地图,并且约定(1)位置0为墙(即不能走的地方),位置1为路(2)走到边界点的位置,就为出路(3)按照上、右、下、左(顺时针)的顺序来探测下一步出路,若下一步路,就往下走(4)若当前点可以走,就将当前点标记为2,为了区分位置1,防止不知道自己走了重复的路首先先来创建迷宫地图并...原创 2018-04-21 11:44:58 · 11067 阅读 · 2 评论 -
基于C语言实现二叉树
树是一种数据结构,是由n (n>=1)个有限点组成一个具有层次关系的集合而二叉树是每个结点最多有两个子树的树结构下面是关于二叉树的一些简单操作在之前写过的链表中,是用链表的头节点的指针来表示一个链表,那么在二叉树中,同样是使用根节点的指针来表示一个二叉树 4 typedef struct TreeNode 5 { 6 TreeNodeType data; 7 s...原创 2018-05-02 21:20:54 · 635 阅读 · 0 评论 -
栈和队列的一些笔试题(1)
下面来写一些关于栈和队列的一些笔试题:问题1:实现一个栈,要求实现Push(入栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)问题2:使用两个栈实现一个队列问题3:使用两个队列实现一个栈问题1:实现一个栈,要求实现Push(入栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)问题分析:要实现返回栈的最小值的时间复杂度为O(1),就要使整个栈的最小元素一定要是在栈顶,那...原创 2018-04-11 22:49:09 · 630 阅读 · 0 评论 -
结构体、位段、枚举、联合
结构体结构体的声明结构是一些值的集合,这些值称为成员变量,结构的每个成员,可以是不同类型的变量struct Stu{ char name[20]; int age; char sex[5]; char id[20];}; //分号不能丢特殊的声明在声明结构体的时候,可以不完全的声明//在声明的时候忽略掉了结构体标签tagstruct { int a; char b...原创 2018-03-08 11:17:41 · 176 阅读 · 0 评论 -
高级指针
1 指针数组指针数组是数组,是一个存放指针的数组2 数组指针数组指针是指针,是一个有能力指向一个数组的指针3 函数指针函数指针是指针,是一个指向函数的指针4 函数指针数组数组是一个存放相同类型数据的存储空间,把函数的地址存放到一个数组中,那这个数组就叫做函数指针数组5 函数指针的数组数组的内容为函数指针6 指向函数指针数组的指针指向函数指针数组的指针是一个指针,指针指向的是一个数组,数组的元素都是...原创 2018-03-08 10:31:08 · 130 阅读 · 0 评论 -
初谈栈帧
一、栈帧每一次函数调用都是一个过程,这个过程称之为函数的调用过程。,这个过程要为函数开辟空间,用于用于本次函数的调用中临时变量的保存、现场保护,这块栈空间我们称之为函数栈帧。在函数调用的过程中这ebp(栈底寄存器)和esp(栈顶寄存器)两个存器存放了维护这个栈的栈底和栈顶指针。二、调用过程以下面代码(修改变量)为例#include <stdio.h>#include <wind...原创 2017-12-06 23:27:13 · 287 阅读 · 0 评论 -
C语言 数组
一维数组1.数组的创建int arr[10];//int 为数组元素类型//arr为数组名//10为数组大小注:创建数组时,[]中必须为常量,不能为变量2.数组的初始化int arr1[10] = { 0 };//数组内容全部为0int arr2[10] = { 1, 2, 3 };//数组中有10个元素,对其中前三个元素进行初始化为1 2 3,其余全为0char arr3[3] = {...原创 2017-11-20 20:39:40 · 240 阅读 · 0 评论 -
排序
下面写一些关于排序的一些基本方法:1.冒泡排序思路:就像“冒泡泡”一样,从头开始,两个两个数作比较,将两个数中较大(较小)的数向后移,再比较下面两个数,依次将较大(较小)的数向后移,最终,将一组数中最大(最小)的数,移动到最后面,再从头开始,移下一个数 14 /************************************* 15 * 16 *冒泡排序 17...原创 2018-06-15 15:02:06 · 216 阅读 · 0 评论