数据结构与算法_c语言描述
爆裂花生
这个作者很懒,什么都没留下…
展开
-
位运算--c语言
位运算--c语言原创 2022-11-12 19:26:41 · 376 阅读 · 0 评论 -
排列组合--c语言实现
排列组合--c语言实现原创 2022-11-12 18:22:47 · 383 阅读 · 0 评论 -
hash(hashset,hashmap)-c语言实现
hashset,hashmap--c语言实现原创 2022-10-07 19:43:55 · 348 阅读 · 0 评论 -
贪心算法相关题目--c语言实现
贪心算法-c语言实现原创 2022-09-17 16:21:20 · 1099 阅读 · 0 评论 -
二叉树(tree)相关数据结构和算法
二叉树数据结构和算法--c语言实现原创 2022-09-11 20:49:49 · 405 阅读 · 0 评论 -
图graph相关数据结构和算法
图的表示和拓扑排序原创 2022-06-25 21:42:09 · 124 阅读 · 0 评论 -
并查集(也称不相交集--disjoint set)
并查集原创 2022-01-23 17:57:36 · 384 阅读 · 0 评论 -
程序员面试金典-0501-插入
程序员面试金典-0501-插入思路://1.Convert N and M to binary//2.Set the bits i to j of N to 0//3.Calculate the effective bit of M,that is, the first bit is 1 to the end.effe_bit_m->31//4.Put the effective bits of M into N//5.Convert binary to decimal给定两个整型数字原创 2021-11-21 15:55:39 · 3525 阅读 · 0 评论 -
程序员面试金典-0506-整数转换
程序员面试金典-0506-整数转换十进制转二进制没有库函数,刷题两次遇到需要调用该函数,就写了函数con_int_to_bin()。很不简洁:对于-2147483648取反需要考虑溢出问题。可以直接通过位运算来转化?下周试一试~整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。示例1: 输入:A = 29 (或者0b11101), B = 15(或者0b01111) 输出:2示例2: 输入:A = 1,B = 2 输出:2提示:A,B范围在[-2147483648原创 2021-11-13 16:19:58 · 761 阅读 · 0 评论 -
程序员面试金典-0305-栈排序
程序员面试金典-0305-栈排序这个题目一直没pass,是因为测试数据有相同的数据,需要注意。栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。示例1: 输入:["SortedStack", "push", "push", "peek", "pop", "peek"][[], [1], [2], [], [],原创 2021-11-06 18:26:19 · 145 阅读 · 0 评论 -
程序员面试金典-0503-翻转数位
程序员面试金典-0503-翻转数位给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。示例 1:输入: num = 1775(110111011112)输出: 8示例 2:输入: num = 7(01112)输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-bits-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。i原创 2021-11-02 22:07:54 · 159 阅读 · 0 评论 -
各种排序-C语言描述
各种排序-C语言描述各种排序算法#include <stdio.h>#include <stdlib.h>void insert_sort(int * data,int length);void bubble_sort(int * data,int length);void shell_sort(int * data,int length);void merge_sort(int * data,int length);void quick_sort(int * da原创 2021-10-17 18:07:31 · 119 阅读 · 0 评论 -
程序员面试金典-0401-节点间通路
程序员面试金典-0401-节点间通路类似于树的层次遍历算法,需要借助队列将节点插入进去,依次遍历。对应更基本的算法即:广度优先遍历节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1: 输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2 输出:true示例2: 输入:n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0,原创 2021-10-01 20:17:46 · 517 阅读 · 0 评论 -
程序员面试金典-0205-链表求和
程序员面试金典-0205-链表求和一个有意思的错误:假如没有清理上次的flag,会影响下一次操作题目描述:给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。 示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?示原创 2021-09-25 20:37:08 · 149 阅读 · 0 评论 -
程序员面试金典-0304-化栈为队
程序员面试金典-0304-化栈为队c语言不支持栈,可以用单链表来实现。实现一个MyQueue类,该类用两个栈来实现一个队列。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop原创 2021-06-14 17:52:26 · 146 阅读 · 6 评论 -
程序员面试金典-0405-合法二叉搜索树
程序员面试金典-0405-合法二叉搜索树思路:1. 通过二叉搜索树中序遍历2. 遍历中序遍历的结果,如果是有序的话,则为合法二叉搜索树实现一个函数,检查一棵二叉树是否为二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。原创 2021-07-10 16:43:51 · 120 阅读 · 0 评论 -
程序员面试金典-面试题04.04-检查二叉树平衡性
程序员面试金典-面试题04.04-检查二叉树平衡性实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \4原创 2021-01-24 11:00:54 · 186 阅读 · 1 评论 -
程序员面试金典-面试题02.02-返回倒数第 k 个节点
程序员面试金典-面试题02.02-返回倒数第 k 个节点这题同样是双指针,类似的有程序员面试金典-面试题02.01-移除重复节点实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。注意:本题相对原题稍作改动示例:输入: 1->2->3->4->5 和 k = 2输出: 4说明:给定的 k 保证是有效的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-node-from-end-of原创 2020-12-10 21:49:29 · 207 阅读 · 1 评论 -
程序员面试金典-0507-配对交换
程序员面试金典-0507-配对交换本题是针对bit位的交换配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。示例1: 输入:num = 2(或者0b10) 输出 1 (或者 0b01)示例2: 输入:num = 3 输出:3提示:num的范围在[0, 2^30 - 1]之间,不会发生整数溢出。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/exch原创 2021-06-26 15:50:21 · 207 阅读 · 0 评论 -
程序员面试金典-面试题04.02-最小高度树
程序员面试金典-面试题04.02-最小高度树上周实现了一个二叉查找树(BST),感觉对于二叉树的操作更加熟练了,然后就找“程序员面试金典”相对应的二叉树的题目,做了四道,有两道可以跑通。本题的两个关键点:1.用有序数组构建二叉查找树,对应二叉树的插入操作2.保证高度最小,难道要BST旋转为AVL树?如果熟悉BST插入的话,想要保证高度最小,需要左右子树节点数目大致相等,因为是有序数组,则每次选取数组中间节点即可给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索原创 2021-01-24 10:52:02 · 158 阅读 · 0 评论 -
程序员面试金典-面试题01.09-字符串轮转
程序员面试金典-面试题01.09-字符串轮转程序员面试金典这本书很金典,相信上面的题目应该不错。尝试使用c语言解决上面的题目。本篇为面试题01.09-字符串轮转,leetcode链接如下:leetcode题目为判断一个字符串是否为另一个字符串的旋转。字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。示例1: 输入:s1 = "waterbottle", s2 = "erbottlewat" 输出原创 2020-12-08 20:41:27 · 193 阅读 · 0 评论 -
程序员面试金典-0204-分割链表
程序员面试金典-0204-分割链表本题可以看作是链表的插入操作练习编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。示例:输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8原创 2021-03-14 09:17:39 · 154 阅读 · 2 评论 -
程序员面试金典-0408-首个共同祖先
程序员面试金典-0408-首个共同祖先设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 3 / \ 5 1 / \ / \6 2 0 8 / \ 7 4示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3原创 2021-01-31 21:02:18 · 128 阅读 · 0 评论 -
程序员面试金典-面试题02.03-删除中间节点
程序员面试金典-面试题02.03-删除中间节点这道题感觉题目有问题,不知所云(感觉想要做的其实是删除node的下一个节点)。以为是要删除中间节点,但是不是,将另外一道也贴出来。1.程序员面试金典删除中间节点2.leetcode-876-链表中间节点题目1:实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。 示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a-&g原创 2020-12-12 20:42:44 · 153 阅读 · 0 评论 -
程序员面试金典-面试题02.06-回文链表
程序员面试金典-面试题02.06-回文链表编写一个函数,检查输入的链表是否是回文的。 示例 1:输入: 1->2输出: false 示例 2:输入: 1->2->2->1输出: true 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci著作权归领扣网络所有。商业转载请原创 2020-12-12 20:00:56 · 235 阅读 · 0 评论 -
程序员面试金典-10.05-稀疏矩阵搜索
程序员面试金典-10.05-稀疏矩阵搜索稀疏矩阵搜索,采用二分法,跳过“”空字符串稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。示例1: 输入: words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ta" 输出:-1 说明: 不存在返回-1。示例2: 输入:words = ["at", "", "", "", "ball", "",原创 2021-08-28 19:02:02 · 181 阅读 · 0 评论 -
程序员面试金典-面试题0410-检查一颗树是否为另一棵树子树
程序员面试金典-面试题0410-检查一颗树是否为另一棵树子树检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。示例1: 输入:t1 = [1, 2, 3], t2 = [2] 输出:true示例2: 输入:t1 = [1, null, 2, 4], t2 = [3, 2原创 2021-01-31 20:50:52 · 162 阅读 · 0 评论 -
程序员面试金典-面试题01.05-一次编辑
程序员面试金典-面试题01.05-一次编辑本题可以转化为求编辑距离。题目限定为可以插入、删除、替换一个字符,这种编辑距离称为莱温斯坦距离,同样经常遇到的还有汉明距离等。字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。 示例 1:输入: first = "pale"second = "ple"输出: True 示例 2:输入: first = "pales"second = "pal"原创 2020-12-29 19:03:44 · 221 阅读 · 0 评论 -
程序员面试金典-面试题02.01-移除重复节点
程序员面试金典-面试题02.01-移除重复节点本题目是一个双指针问题,保持一个指针不动,移动需要移除节点的指针。编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?来源:力扣(LeetCode)原创 2020-12-10 21:35:17 · 208 阅读 · 1 评论 -
程序员面试金典-0208-环路检测
程序员面试金典-0208-环路检测一般的话,检测是否有环路就够了,但是本题需要返回环路的位置,增加了一步。给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 示例 1:输入:head原创 2021-06-26 15:03:08 · 137 阅读 · 0 评论 -
程序员面试金典-面试题02.07-链表相交
程序员面试金典-面试题02.07-链表相交今天才发现《程序员面试金典》就是经典的《Cracking the Coding Interview》,在国外很有名,看来值得做完。这个题目是判断两个链表的相交节点,C语言直接用“==”判断struct是否相等就是判断的内存位置,让我联想到java中没有指针,那么怎么判断两个对象是同一个那?让我又联想到之前的面试,问一堆等于号和equals()的区别。其实java中等于号和没有重写的equals()函数就是判断的内存位置。给定两个(单向)链表,判定它们是否相交并原创 2020-12-17 21:11:50 · 225 阅读 · 0 评论 -
程序员面试金典-0108-零矩阵
程序员面试金典-0108-零矩阵编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。 示例 1:输入:[ [1,1,1], [1,0,1], [1,1,1]]输出:[ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入:[ [0,1,2,0], [3,4,5,2], [1,3,1,5]]输出:[ [0,0,0,0], [0,4,5,0], [0,3,1,0]]来源:力扣(LeetCo原创 2021-04-11 19:55:52 · 124 阅读 · 0 评论 -
程序员面试金典-0803-魔术索引
程序员面试金典-0803-魔术索引本题为有序数组找出下标和索引值相同的最小值,主要有两个思路:1:有序数组,势必要分治法;2:递归处理魔术索引。 在数组A[0...n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。示例1: 输入:nums = [0, 2, 3, 4, 5] 输出:0 说明: 0下标的元素为0示例2: 输入:num原创 2021-04-10 18:01:17 · 160 阅读 · 1 评论 -
程序员面试金典-面试题0302-栈的最小值
程序员面试金典-面试题0302-栈的最小值这道题解的时候,刚开始出现runtime error:member access within misaligned address,具体就是因为malloc() 申请内存之后,没有对元素进行初始化,看来以后还是不能图方便。请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。示例:MinStack minStack = new MinStack原创 2021-06-10 20:37:50 · 150 阅读 · 0 评论 -
程序员面试金典-面试题0106-字符串压缩
程序员面试金典-面试题0106-字符串压缩题目很容易理解,将字符串按照出现的次数进行压缩。但是实现过程中遇到两个bug:1.压缩后的字符串长度最长并不是strlen(str)+1,应该是2*strlen(str),为这种情况"abc"->“a1b1c1”;2.字符出现的次数可能大于9,即可能不是个位数,不能简单地取“0123456789”字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有原创 2020-12-29 19:09:30 · 161 阅读 · 0 评论 -
优先队列(堆)
优先队列(堆)优先队列(堆)用于调度、排序方面,基本模型如下:队列中的节点都是有优先级的,如图删除的时候是最小值节点。heap.hstruct HeapStruct;typedef struct HeapStruct *PriorityQueue;PriorityQueue Initialize(int MaxElements);void Destory(PriorityQueue H);void MakeEmpty(PriorityQueue H);void Insert(Eleme原创 2021-07-18 17:32:40 · 247 阅读 · 0 评论 -
hash表-使用数组加链表实现hash表
hash表-使用数组加链表实现hash表hash.htypedef int ElementType;struct ListNode{ ElementType Element; int val; struct ListNode * next;};typedef struct ListNode * Position;typedef Position List;struct HashTbl{ int TableSize; List * TheLists;};原创 2021-06-16 21:59:43 · 173 阅读 · 0 评论 -
使用单链表实现queue和stack
使用单链表实现queue和stack使用单链表实现queue和stack,通过在头尾插入、弹出方式不同,实现队列和栈。//QueueAndStack.h#define bool int#define true 1#define false 0struct ListNode{ int val; struct ListNode * next;};struct ListNode * enqueue(struct ListNode * head,int val);struct原创 2021-04-11 20:42:27 · 162 阅读 · 0 评论 -
二叉查找树-BinarySearchTree-C语言实现
二叉查找树-BinarySearchTree二叉查找树即二叉树的左子树的值都小于根节点的值,右子树的值都大于根节点的值。有几个显而易见的性质:1.最左子节点为最小值;2.最右子节点为最大值;3.中序遍历得到从小到大的节点值序列。实现主要分为binary_search_tree.h和binary_search_tree.c两个文件,在linux上已经跑通并做了简单的测试。首先为binary_search_tree.htypedef struct treenode{ int val; st原创 2021-01-16 21:21:35 · 440 阅读 · 0 评论 -
二叉树遍历-C语言
二叉树遍历-C语言二叉树遍历有先序遍历,中序遍历、后序遍历以及面试经常遇到的层序遍历。往往有递归实现和非递归实现,递归实现代码简单,非递归实现往往要借助栈和队列等数据结构。层序遍历(往往也对应广度优先遍历)我在面试中遇到过三四次,借用队列还是很容易实现的。博客内容是针对leetcode的代码可以通过为标准。多提一下递归,递归的实现主要考虑两点:1.终止条件,即递归如何终止;if(root==NULL) return NULL;2.递归需要扩展到更小的规模,例如本例中从根节点分别扩展到左子节点原创 2020-11-28 21:18:43 · 1942 阅读 · 0 评论