自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

戴磊的博客

本人编程语言教程网 http://www.geekfc.com

  • 博客(44)
  • 收藏
  • 关注

原创 linux c解析命令行选项getopt、optarg、optind、opterr、optopt

原文地址http://daileinote.com/computer/c_base/14一个典型的 unix 命令行有着如下的形式。command [options] arguments选项的形式为连字符 (-) 紧跟着一个唯一的字符用来标识该选项,以及一个针对该选项的可选参数。带有一个参数的选项能够以可选的方式在参数和选项之间用空格分开。多个选项可以在一个单独的连字符后归组...

2019-12-24 19:01:33 1624

原创 linux c可变参数va_start、va_end、va_arg、va_list

原文地址http://daileinote.com/computer/c_base/13va_start、va_end、va_arg、va_list 其实是宏定义,在不定参数函数中会用到。在解释上面几个之前,我们先来做几件事。确定栈增长方向#include <stdio.h>#include <stdlib.h>#include <uni...

2019-12-24 18:59:49 511

原创 最长公共子序列

原文地址http://www.daileinote.com/computer/math/0e最长公共子序列(Longest Common Subsequence)(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题这与查找 最长公共子串 的问题不同的地方是:子序列不需要在原序列中占用连续的位置 。最长公共子序列问题是一个经典的计算机科学问题,也是数据比...

2019-12-23 20:08:33 309

原创 最小路径开销

原文地址http://www.daileinote.com/computer/math/0f最小开销路径(Min Cost Path)(MCP),给出一个开销矩阵cost,求得从cost[x][y] 到 cost[i][j] 的最小开销。比如下图从 (0,0) 到 (2,2) 的最小开销为 8 (1 + 2 + 2 + 3)想要到达 (m, n),必须经过 (m-1, n-1...

2019-12-23 20:07:46 645

原创 硬币改变

原文地址http://www.daileinote.com/computer/math/10硬币改变(Coin Change)其实是动态规划里的组合问题,给出一个数 N ,在可选的数组S里 {s1,s2,s3...},有多少种组合的方式,使得它们的和等于 NN = 4S = {1,2,3}4种解决方案 {1,1,1,1},{1,1,2},{2,2},{1,3}N = 10S ...

2019-12-23 20:07:03 129

原创 贪心算法

原文地址http://www.daileinote.com/computer/math/40贪心算法(Greedy Algorithm),是一种在每一步选择中都采取在当前状态下最好或最优的选择,即做出局部最优选择,寄希望这样的选择能导致全局最优解贪心算法不保证得到最优解,但是对很多问题确实可以得到最优解贪心算法比动态规划简单很多,所以能用贪心算法解决的事,不该使用动态规划去解决一...

2019-12-23 20:06:08 104

原创 活动选择问题

原文地址http://www.daileinote.com/computer/math/41活动选择问题(Activity Selection problem)是一个典型的问题可以通过贪心算法解决,问题描述如下假设一个明星今天需要参加n个活动,每个活动都有开始时间和结束时间,请给出一个安排,使得该明星今天能参加最多的活动数解决步骤如下:1.通过结束时间从小到大排序2.在已经排...

2019-12-23 20:05:22 569

原创 最小生成树

原文地址http://www.daileinote.com/computer/math/42给定一个连接的无向图(undirected graph),一个图的生成树是指所有顶点连接在一起的子图。一个图可能有多个生成树最小生成树(Minimum Spanning Tree)或者最小权重生成树是指一个有权重的连接的无向图,所有边的权重和小于或者等于所有其他的生成树。最小生成树有 V-1 ...

2019-12-23 20:04:39 117

原创 哈夫曼编码

原文地址http://www.daileinote.com/computer/math/43霍夫曼编码(Huffman Coding)又译为哈夫曼编码、赫夫曼编码,是一种用于无损数据压缩的熵编码(权编码)算法。由美国计算机科学家大卫·霍夫曼(David Albert Huffman)在1952年发明霍夫曼树常处理符号编写工作。根据整组数据中符号出现的频率高低,决定如何给符号编码。如果符号...

2019-12-23 20:02:58 380

原创 最长上升子序列

原文地址http://www.daileinote.com/computer/math/0d​​​​​​​最长上升子序列(Longest Increasing Subsequence),简称LIS,即在一个给定的数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地大。最长递增子序列中的元素在原序列中不一定是连续的,比如{0, 8, 4, 1...

2019-12-21 17:41:03 156

原创 排序算法总结

原文地址:http://www.daileinote.com/computer/math/0a术语记录:稳定(Stability)- 如果一个排序算法是得一个对象排序后,相同 key 的元素顺序不变,则我们称此排序算法是稳定的基于比较排序算法(comparison based sorting algorithms)- 该排序算法需要有元素之间的比较原位置排序(Sortin...

2019-12-19 19:51:47 148

原创 搜索算法

原文地址http://www.daileinote.com/computer/math/09搜索算法主要有:线性搜索(linear search) 二分查找(binary search) 跳跃搜索(jump search) 插值搜索(interpolation search) 指数搜索-指数二分搜索(exponential search) 三分搜索(ternary search...

2019-12-18 19:41:47 148

原创 linux文件io(open read write close)

原文地址http://daileinote.com/computer/linux_sys/03所有执行io操作的系统调用都是以文件描述符(大于0的整数)来指代打开的文件。文件描述符可以表示诸如管道(pipe)、fifo、socket、终端、设备和普通文件。对于每个进程,文件描述符都自成一套。下图的3个文件描述默认都会打开(可以说都是继承自shell文件描述符的一个副本)程序中可以用0...

2018-05-22 10:33:07 1535

原创 linux进程

原文地址http://daileinote.com/computer/linux_sys/04进程是一个可执行程序的实例。程序包含了一系列信息,这些信息描述了如何在运行时创建一个进程,所包含的内容如下。1.二进制格式标识,linux上用的是elf格式2.机器语言指令3.程序入口地址4.数据5.符号表和重定位表6.共享库和动态链接信息7.其他信息一个程序可以创建出很多进程,换句话...

2018-05-22 10:31:46 179

原创 linux动态内存分配-详解

进程可以通过增加堆的大小来分配内存,堆就是一段长度可变的连续的虚拟内存,开始于未初始化数据段末尾,随着内存的分配和释放增减。通常堆的当前内存边界称为program break。最初,program break正好位于未出华数据段末尾之后(&end位置)。当program break位置上升后,程序可以访问新分配的任何内存地址,而此时物理内存尚未分配,内核会在进程试图首次访问...

2018-05-22 10:29:35 3040

原创 linux c时间

原文地址http://daileinote.com/computer/linux_sys/08日历时间#include <sys/time.h>struct timeval{ time_t tv_sec; /*自1970-01-01 00:00:00到现在的秒数*/ suseconds_t tv_usec; /*额外的微妙数*/};int...

2018-05-21 22:16:48 691

原创 linux进程凭证(权限)

原文地址http://daileinote.com/computer/linux_sys/07每个进程都有一套用数字表示的用户id和组id,这些id决定了进程执行时具体的权限。实际用户id和实际组id这2个id决定了进程所属的用户和组。假设我们用root用户登录,那么我们在shell中创建的新进程都会从父进程shell中继承这些id。有效用户id和有效组id进程将结合有效用户id...

2018-05-21 22:05:29 1017

原创 linux用户和组

原文地址http://daileinote.com/computer/linux_sys/06linux上每个用户都拥有一个唯一的用户名和一个相对应的用户id(uid),用户可以隶属于一个或多个组。每个组也拥有一个唯一的组名和组id(gid)。用户和组主要是用来控制资源访问权限的。记录用户相关信息的文件:/etc/passwd每个用户都会在此文件里有一条记录,每条记录包含7个字段。...

2018-05-21 22:04:25 150

原创 linux系统调用及错误处理

原文地址http://daileinote.com/computer/linux_sys/02系统调用是内核提供给外部程序的接口,进程可以通过系统调用来一自己的名义来执行某些动作。在深入了解系统调用之前,先关注以下几点。1.系统调用处理器会从用户态切换到核心态以便能访问到内存核心空间。2.系统调用的组成是固定的,每个系统调用都有一个唯一的数字来标识,而程序只是通过名称来调用。从编程角度来...

2018-05-18 21:52:16 2887 1

原创 linux内核简介

原文地址http://daileinote.com/computer/linux_sys/01内核是用来管理和分配计算机资源的,它主要有进程调度、内存管理、提供文件系统、创建和终止进程、对设备的访问、联网、提供系统调用的接口等。内核还可以为内阁用户模拟出抽象的虚拟私有计算机,每个用户都可以登录进系统独立操作,与其他用户大致无干。内核态和用户态现代处理器一般都允许cpu至少在2种不同的状态...

2018-05-18 21:50:48 242

原创 linux c预处理器

原文地址http://daileinote.com/computer/c_base/10#define定义明显常量(符号常量), 定义宏命令,定义后,编译器在预处理阶段就会直接替换值,所以一些关系到运算符优先级的尽量多的使用括号。#include<stdio.h>#define PI 3.14//字符串化#define say_2(x) printf("the s...

2018-05-16 21:36:50 346

原创 linux c按位运算符

原文地址http://daileinote.com/computer/c_base/09按位取反:~0变成1,1变成0。按位与:&两边都为1的为1,其他为0。按位或:|只要有一方为1的就为1,其他为0。按位异或:^一方为0,一方为1的为1,其他为0例子#include<stdio.h>typedef unsigned char u_char;...

2018-05-16 17:55:10 2154

原创 linux c其他复杂的声明以及typedef

原文地址http://daileinote.com/computer/c_base/08先了解下优先级,[]和()的优先级相同,他们比*的优先级高,结合是从左往右。int * days[5]days是数组,包含5个元素(int型指针)int (* days)[5]days是指针,指向一个数组,数组里有5个int元素int days[2][3]days是二维数组,包含2个数组,每...

2018-05-16 10:33:39 242

原创 linux c结构体、联合、枚举

原文地址http://daileinote.com/computer/c_base/07结构体可以用来表示复杂的数据结构,提高表示数据的能力,让你能创造新的形式。//定义结构体struct person { char name[10]; int age;};//定义结构体变量struct person p1;//访问赋值strcpy(p1.name, 'fre...

2018-05-16 10:32:50 544

原创 linux c类型限定符const volatile

原文地址http://daileinote.com/computer/c_base/06constconst类型限定符是用来设定对象为只读。const int num;num = 2; //报错 const int num = 2; //没问题//声明数组只读const int days[4] = {1,2,3,4};声明普通变量和数组使用const...

2018-05-16 10:31:55 132

原创 linux c动态内存分配函数malloc calloc free

原文地址http://daileinote.com/computer/c_base/05void *malloc(size_t size)分配size个字节的内存,成功返回内存地址,失败返回NULLvoid *calloc(size_t n, size_t size)分配n*size个字节内存,并把分配到的内存所有位置0,成功返回内存地址,失败返回NULLvoid free...

2018-05-16 10:30:32 1329

原创 linux c存储期、作用域、链接

原文地址http://daileinote.com/computer/c_base/04存储期:静态存储期分配的内存在程序执行期间一直存在线程存储期分配的内存从线程生成到线程结束之前一直存在自动存储期对象一般在块里面,当程序进入这个块时分配内存,退出这个块时就释放内存动态存储期手动分配内存和释放内存(malloc,calloc)作用域:文件作用域(全局)块作用域可见范围在块内函数作用...

2018-05-16 10:29:39 164

原创 linux c字符串-指针

原文地址http://daileinote.com/computer/c_base/02C语言中的字符串是最有用最重要的数据类型之一,虽然我们平常用的很多,但是内部各种细节相信不是每个人都能说得明白。字符串涉及到很多指针操作,对指针不太熟悉的建议先阅读linux c数组和指针(详解)。字符串字面量(字符串常量)属于静态存储类别,所以只会存储一次,在整个生命周期内存在//如果字符串字...

2018-05-16 10:28:14 1052

原创 linux c数组和指针(详解)

原文地址http://daileinote.com/computer/c_base/01普通数组声明//声明数组int arr[3];int arr[3] = {1,2,3};//由编译器自动指定数组大小int arr[] = {1,2,3}//多维数组int arr[2][2] = {{1,2}, {3,4}}数组变量名本身就是数组的地址,数组跟指针的关系很密切...

2018-05-13 01:17:42 2214

原创 lua coroutine(协程)

原文地址http://www.daileinote.com/computer/lua/15协程相关的文章网上有很多,众说纷坛,相比其他技术概念理解起来没那么直接。因为协程涉及了很多底层高并发概念,没接触过操作系统调度,C语言等底层知识根本不可能完全理解。备注:以下我说的单进程就是指一个进程一个主线程1.协程跟linux c里的epoll很像,都是单进程非阻塞的(也就是没有io等待,单核c...

2018-05-12 13:26:39 1154

原创 lua模拟面向对象编程

原文地址http://www.daileinote.com/computer/lua/14lua中跟对象和类最像的就是表格有方法和属性,所以类和对象都只能用表格来模拟声明一下,其实表格的功能已经能应付大部分场景了,而且lua脚本语言本就不是面向对象语言(它的优势是轻量级简单快速),硬要模拟面向对象有时候会搞得不伦不类,所以以下只为学习,不建议应用到正式环境。例子--声明一个基类Web...

2018-05-11 19:42:22 333

原创 lua元表

原文地址http://www.daileinote.com/computer/lua/13lua元表其实就是为了扩展表格间的运算,比如之前我们如果让2个表格相加就会报错,一旦我们设置了元表并加上了__add属性,那么就会正常执行。先看2个元表相关的函数setmetatable(table,metatable)将metatable设置为table的元表并返回table,如果metata...

2018-05-11 14:03:13 554

原创 lua模块编写

原文地址http://www.daileinote.com/computer/lua/12lua允许我们编写自定义模块以便后面调用,在编写模块之前我们先认识2个知识点1.lua语言中数组,模块其实都是table表格。2.在之前的lua基本语法里我们知道函数是可以赋值给变量的好,我们新建一个文件my.lua代码如下local my = {}my.name = '沧浪水'my.u...

2018-05-11 14:02:01 1119 1

原创 lua基本语法

原文地址http://www.daileinote.com/computer/lua/11变量1.变量无需声明2.变量没声明为nil,赋值为nil等同于删除3.lua把nil,false视为假,其他都为true4.Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量5.#ta字符串的长度,也可以获取表格数字索引对应的个数例子--全局赋...

2018-05-11 14:01:02 141

原创 lua基础函数 type,tonumber,tostring,pcall,print

原文地址http://www.daileinote.com/computer/lua/10type(v)用来判断v的类型返回字符串"nil", "number", "string", "boolean", "table", "function", "thread", "userdata"tonumber(e [,base])把e(必须为数字或者是可以转成数字的字符串)转成10进...

2018-05-11 13:59:31 32933 1

原创 lua ipairs pairs

原文地址http://www.daileinote.com/computer/lua/09这两个函数都是用来遍历表格数组的,区别如下:iparis只会遍历数字索引,并在遇到第一个非数字索引时终止paris则会遍历所有例子 local t = {22,33,44,name='沧浪水',url='www.freecls.com',55,66}t[10] = '100'for...

2018-05-10 13:10:00 237

原创 lua 基本函数dofile loadfile loadstring

原文地址http://www.daileinote.com/computer/lua/08dofile([filename])如果提供了filename则打开读取里面内容并以代码块方式执行,没提供则从标准输入stdin读取并执行。如果报错,错误会上传到到调用者(运行在非保护模式)例子新建aa.lua--aa.luaurl = 'www.freecls.com'local n...

2018-05-10 12:42:02 813

原创 lua assert collectgarbage

原文地址http://www.daileinote.com/computer/lua/07assert (v [, message])断言,主要是用来输出错误当v为false或nil时,message可选默认为assertion failed当v为true时返回v,和message两个参数例子assert(1>10)--输出如下--[[lua: tmp.lua:1: a...

2018-05-10 12:01:28 446

原创 lua require模块加载机制

原文地址http://www.daileinote.com/computer/lua/06调用模块步骤当我们调用require"modname"1.会去检查package.loaded表格是否已经加载过,如果已经加载过直接返回,所以重复加载同一个模块多次只会加载1次2.如果package.loaded表格没有此模块记录,则会到package.path指定的路径中搜索lua文件,如果...

2018-05-10 11:02:06 5492 1

原创 lua os(操作系统)库

原文地址http://www.daileinote.com/computer/lua/05lua os库提供了简单的跟操作系统有关的功能os.clock()返回当前当前cpu使用的秒数例子--用来计算中间的遍历花费了多少cpu时间local x = os.clock()local s = 0for i = 1, 10000000 do s = s + i endpr...

2018-05-10 10:59:29 9585 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除