数据结构
fsfsfsdfsdfdr
日更新一篇
展开
-
LeetCode 179. 最大数 C语言实现
给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数k的范围是[-1e7, 1e7]。基本思想:因为是连续的数组,那么...原创 2019-10-25 20:26:39 · 503 阅读 · 0 评论 -
C语言中申请0内存与结构体中数组长度为0深入解析
最近在从事C语言发面的开发,发现自己的基础一般,工作中遇到了C语言中malloc申请长度为0的情况,此时居然返回的指针不是空,造成了业务终端的问题,同时对结构体中数组长度为0的内存分配不是很清楚,因此总结他人的博客和自己的见解进行了深入分析。一、malloc申请0长度内存 初始化在堆上malloc了一块区域,但是malloc()的size为0,这块地址被用来存了很多数据,数据...原创 2019-07-28 14:10:41 · 2083 阅读 · 0 评论 -
C语言内存布局
在C语言中,内存的主要分为下列几部分:1. Text/Code Segment 文本/代码区2. Initialized Data Segments 初始化的数据区3. Uninitialized Data Segments 未初始化的数据区4. Stack Segment 栈区5. Heap Segment 堆区 Text/Code Segment 文本/代...转载 2018-09-28 10:11:41 · 757 阅读 · 0 评论 -
二叉树节点数计算
二叉树的第i层至多有2i-1个结点深度为h的二叉树至多有2h-1个结点对于一棵二叉树,若含有n0个叶子结点,n2个度为2的结点,则必存在关系式:n2=n0-1具有n个结点的完全二叉树的深度为[log2n]+1.[]表示取整若对含n个结点的完全二叉树从上到下且从左至右进行1至n的编号,则对完全二叉树中任意一个编号为i的结点: 若i=1,则该结点是二叉树的根,无双亲,否则,编...原创 2018-09-07 09:49:22 · 22121 阅读 · 0 评论 -
僵尸进程
在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被...转载 2018-09-12 21:43:37 · 87 阅读 · 0 评论 -
互斥量和信号量的区别
1. 互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。...转载 2018-09-15 20:36:28 · 517 阅读 · 0 评论 -
哈希表的构造方法
哈希表的构造方法: (1)、数字分析法:事先知道关键字的集合,且每个关键字的位数比哈希表的地址码位数多时,可以从关键字中选出分布比较均匀的若干位,构成哈希地址。 (2)、平方取中法:当无法确定关键字中哪几位分布比较均匀时,可以先求出关键字的平方值的中间几位作为哈希地址 (3)、分段叠加法:按哈希表的地址位数将关键字分成位...原创 2018-09-06 10:34:25 · 5739 阅读 · 0 评论 -
二叉树的结点计算
二叉树的结点计算问题及性质 性质1 : 二叉树的第 i 层上至多有 2^(i-1) 个结点 (i>=1) 性质2 : 深度为 k 的二叉树至多有 2^k -1 个结点( k>=1) 性质3 : 对任意的一颗二叉树 T ,若叶子结点数为 n0,而其度数为 2 的结点数为 n2,则 n0 = n2+1 性质4 : ...原创 2018-09-06 10:09:57 · 28438 阅读 · 7 评论 -
排序算法(三)之堆排序
堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:最大堆的特性如下:父结点的键值总是大于或者等...转载 2018-09-06 10:04:24 · 117 阅读 · 0 评论 -
桶排序(bucket sort)
桶排序(bucket sort)基本思想桶排序的基本思想是将一个数据表分割成许多buckets,然后每个bucket各自排序,或用不同的排序算法,或者递归的使用bucket sort算法。也是典型的divide-and-conquer分而治之的策略。它是一个分布式的排序,介于MSD基数排序和LSD基数排序之间。关于基数排序可以参看上一篇博文《排序算法九:基数排序》。基本流程建立一堆...转载 2018-09-06 09:56:22 · 875 阅读 · 0 评论 -
哈夫曼树
一、什么是哈夫曼树?判定树: 在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来:if(score<60) cout<<"Bad"<<endl; else if(score&l...转载 2018-09-06 09:27:39 · 740 阅读 · 0 评论