- 博客(25)
- 收藏
- 关注
转载 经典中的经典算法:动态规划(详细解释,从入门到实践,逐步讲解)
https://blog.csdn.net/ailaojie/article/details/83014821
2019-09-23 23:17:00 506
转载 malloc、calloc、realloc的区别
C语言内存分配方式<1>从静态存储区域分配 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量.<2>在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.<...
2019-08-29 23:00:05 189
原创 运行时(动态)加载
动态库的加载涉及到4个API接口:打开动态库(dlopen)、查找符号(dlsym)、错误处理(dlerror)以及关闭动态库(dlclose),程序可以通过这几个API对动态库进行操作。1.dlopen() dlopen()函数用来打开一个动态库,并将其加载到进程地址空间,完成初始化的过程,它的C原型定义为:void * dlopen(const char *file...
2018-10-06 19:02:49 871
原创 弱符号与强符号(弱引用与强引用)
弱符号与强符号 我们经常在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。这种符号的定义可以被称为 强符号(Strong Symbol)。有些符号的定义可以被称为 弱符号(W eak Symbol)。对于C/C++语言来说,编译器默认函数和初始化了的全局变量为强符号,未初始化的全局变量为弱符号。我们也可以通...
2018-10-06 17:19:16 1679
原创 进程间通信之Posix 信号量
概述 信号量(semaphore)是一种用于提供不同进程间或者一个给定进程的不同线程间同步手段的原语。 本文讨论: 1.Posix 有名信号量:使用Posix IPC 名字标识,可用于进程或线程间的同步。 2.Posix 基于内存的信号量:存放在共享内存区中,可用于进程或线程间的同步。 我们暂时只考虑不同进程间的同步。首先考虑二值信号量(b
2017-06-29 00:55:34 696
原创 eventfd 函数使用介绍
从Linux 2.6.27版本开始,新增了不少系统调用,其中包括eventfd,它的主要是用于进程或者线程间的通信(如通知/等待机制的实现)。函数原型: #include /* * function: 创建eventfd * @initval: 信号量的初始值 * @flags: (2.6.27以上内核有效)可以设置一下标志位,如果是2.6.26或之前版
2017-06-24 00:08:00 4299 2
转载 epoll 机制介绍
epoll - I/O event notification facility 在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目
2017-06-23 23:45:07 350
转载 linux进程调度浅析
操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。如果进程不可执行
2016-10-01 00:36:46 333
转载 DNS 原理入门
重要 本文转自: http://www.ruanyifeng.com/blog/2016/06/dns.htmlDNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作。我的目标是,读完此文后,你就能完全理解DNS。一、DNS 是什么?DNS (Domain
2016-06-20 00:24:18 413
转载 Linux 信号应用之黑匣子程序设计
重要 本文转载至:http://blog.jobbole.com/101619/1. 何为黑匣子程序及其必要性飞机上面的黑匣子用于飞机失事后对事故的时候调查,同理,程序的黑匣子用于程序崩溃后对崩溃原因进程定位。其实Linux提供的core dump机制就是一种黑匣子(core文件就是黑匣子文件)。但是core文件并非在所有场景都适用,因为core文件是程序崩溃时的内
2016-06-14 23:36:24 1935
原创 循环链表
循环链表介绍 循环链表是另一种形式的链表,它提供了更为灵活的遍历表元素的能力。循环链表可以是单向的或双向的,但区分一个链表是不是循环链表只要看它有没有尾部元素即可。在循环链表中,最后一个元素的next指针又指回头元素而不是设置为NULL。在双向循环链表中,头元素的prev指针则指向最后一个元素,这使得循环链表中的每个元素既可以看做头元素也可以看做尾元素。遍历循环链表可以从任何一个
2016-04-27 23:15:44 707
原创 双向链表
双向链表介绍 双向链表,如同其名所暗示的那样,链表元素之间由两个指针链接。双向链表中的每一个元素都由3部分组成:除了数据域成员和next指针外,每个元素还包含一个指向其前驱元素的指针,称为prev指针。双向链表的组成是这样的:将一些元素链接在一起使得每个元素的next指针都指向其后继的元素,而每个元素的prev指针都指向其前驱元素。为了标识链表的头和尾,将第一个元素的prev指针和
2016-04-24 16:08:02 2927
原创 链式哈希表
链式哈希表介绍 待补充链式哈希表实现// Chtbl.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #include /*链表元素结构体定义*/typedef struct Li
2016-04-15 00:03:51 1039
原创 哈希表
哈希表支持一种最有效的检索方法:散列。从根本上来说,一个哈希表包含一个数组,通过特殊的索引值(键)来访问数组中的元素。哈希表的主要思想是通过一个哈希函数,在所有可能的键与槽位之间建立一张映射表。哈希函数每次接受一个键将返回与键相对应的哈希值。键的数据类型可能多种多样,但哈希值的类型只能是整型。 通常与各种各样的键相比,哈希表的条目数相应较少。因此,绝大多数哈希函数会将一些不同的键
2016-04-14 20:17:03 428
原创 单向链表
单链表介绍 单链表(通常简称链表)由各个元素之间通过一个指针彼此链接起来而组成。每个元素包含两部分:数据成员和一个称为next指针。通过采用这种二成员结构,将每个元素的next指针设置为指向其后面的元素。最后一个元素的next指针设置为NULL,简单地表示链表的尾端。链表开始处的元素是“头”,链表末尾的元素称为“尾”。 待补图 要访问链表中的某
2016-04-14 20:06:06 601
原创 折半查找
折半查找的描述 折半查找是对一个有序数据集合所做的操作。查找开始时,首先找出有序集合中间的那个元素。如果此元素比要查找的元素大,就接着在较小的一个半区进行查找;反之,如果此元素比要查找的元素小,就在较大的一个半区进行查找。在每个更小的数据集中重复这个查找过程,直到找到要查找的元素或数据集不能再分割。 折半查找能够应用于任何类型的数据,只要能将这些元素按某种规则进行排
2016-03-28 23:54:12 640
原创 基数排序
基数排序的描述 基数排序是另外一种高效的线性排序算法。其方法是将数据按位分开,并从数据的最低有效位到最高有效位,依次排序,从而得到有序数据集合。例如:用基数排序对十进制数据{15,12,49,16, 36, 40}进行排序。在对各位数进行排序之后,其结果为{40,12,15, 16,36,49},在对十位进行排序之后,其结果为{12,15,16,36,40,49}。有一点非常重要,
2016-03-28 23:08:30 623
原创 计数排序
计数排序的描述 计数排序是一种高效的线性排序,它通过计算一个集合中元素出现的次数来确定集合如何排列。不同于之前介绍的一些算法是基于比较的,计数排序不需要进行元素比较,而且它的运行效率要比O(nlg n)比较排序高。 计数排序有一定的局限性。其中最大的局限就是它只能用于整型或者那些可以用整型来表示的数据集合。这是因为计数排序利用一个数组的索引来记录元素出现的次数。例如...
2016-03-27 23:53:46 486
原创 插入排序
插入排序的描述 我们假设对较小数组A[0...n-2]排序的问题已经解决了,我们得到了一个大小为n-1的有序数组:A[0] ≤...≤ A[n-2]。我们如何把这个较小规模的解和元素A[n-1]一同考虑,来得到原问题的解呢?显然,我们所需要做的就是在这些有序的元素中为A[n-1]找到一个合适的位置,然后把它插入到那里。 有3种合理的做法可以达到这个目的,它们各不相同
2016-03-22 23:37:16 743
原创 冒泡排序
冒泡排序描述 冒泡排序比较表中的相邻元素,如果它们是逆序的话就交换它们的位置。重复多次以后,最终,最大元素就“沉到”了列表的最后一个位置。第二遍操作将第二大的元素沉下去。这样一直做,知道n-1遍以后,该列表修排好序了。第 i 遍(0 算法:
2016-03-22 01:02:33 469
原创 选择排序
选择排序描述选择排序开始的时候,扫描整个列表,找到它的最小元素然后和第一个元素交换,将最小元素放到它在有序表中的最终位置上。然后我们从第二个元素开始扫描列表,找到最后n-1个元素中的最小元素,再和第二个元素交换位置,把第二小的元素放到它在有序表中的最终位置上。一般来说,在对该列表做第 i 遍扫描的时候(i 的值从0到n-2),该算法在最后n-1个元素中寻找最小元素,然后拿它和A[i]交换:
2016-03-22 00:58:00 484
原创 合并排序
合并排序描述 合并排序本质上是将一个无序元素集分割成多个只包含一个元素的集,然后不断的将这些小的集合并,直到一个新的大有序数据集生成。例如:对于一个需要排序的数组A[0...n-1],合并排序把它一分为二:A[0...(n/2)-1]和A[(n/2)...n-1],并对每个子数组递归排序,然后把这两个排好序的子数组合并为一个有序数组。 算法:Merg
2016-03-17 22:28:00 566
原创 快速排序
快速排序的描述 快速排序是一种基于分治(+递归)技术的重要排序算法,广泛认为它是解决一般问题的最佳排序算法,属于比较排序的一种,而且不需要额外的存储空间。在处理中到大型数据集时,快速排序是一个比较好的选择。 快速排序按照元素的值对它们进行划分。具体来说,它对给定的数组中的元素进行重新排列,以得到一个快速排序的分区。一个分区中,所有在s下标之前的元素都小于等于A[...
2016-03-13 11:23:18 636
原创 大端模式与小端模式
概念:大小端模式是指各种体系的计算机系统(CPU的体系架构:PPC、ARM、MIPS等)中采用的字节存储机制(多字节数据类型),分为:大端模式和小端模式两种。大端模式:是指数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中。小端模式:是指数据的高字节保存在内存的高地址中,数据的低字节保存在内存的低地址中。主机序:不同的CPU有不同的字节序类型,这些字节序
2016-03-12 01:19:08 1188
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人