
c语言
文章平均质量分 60
yinhua405
努力工作
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
286 · 逆序对
给定一个n,一个包含2^n个数的数列。再给定一个包含m个数的数组,表示询问m次,对于每个qi,每次要求把这些数每2^qi分为一组,然后把每组进行翻转。每次操作后整个序列中的逆序对个数是多少呢?例如:对于序列1 3 4 2,逆序对有(4, 2),(3, 2),总数量为2。翻转之后为2 4 3 1,逆序对有(2, 1),(4, 3), (4, 1), (3, 1),总数量为4。0≤n≤200\leq n\leq 200≤n≤201≤m≤1051\leq m \leq 10^{5}1≤m≤1050≤原创 2021-06-11 07:18:19 · 151 阅读 · 0 评论 -
Redis_哨兵
sentineltypedef struct sentinelRedisInstance { // 标识值,记录了实例的类型,以及该实例的当前状态 int flags; /* See SRI_... defines */ // 实例的名字 // 主服务器的名字由用户在配置文件中设置 // 从服务器以及 Sentinel 的名字由 Sentinel 自动设置 // 格式为 ip:port ,例如 "127.0.0.1:26379" cha...原创 2021-04-27 13:54:21 · 287 阅读 · 0 评论 -
Redis_复制
复制 /* Replication (master) */ int slaveseldb; /* Last SELECTed DB in replication output */ // 全局复制偏移量(一个累计值) long long master_repl_offset; /* Global replication offset */ // 主服务器发送 PING 的频率 int repl_ping_slave_peri...原创 2021-04-21 15:26:11 · 117 阅读 · 0 评论 -
Redis_服务器
服务器/** Redis 命令*/struct redisCommand {// 命令名字char *name;// 实现函数redisCommandProc *proc;// 参数个数int arity;// 字符串表示的 FLAGchar *sflags; /* Flags as string representation, one char per flag. */// 实际 FLAGint flags; /* The actual ..原创 2021-04-20 09:57:15 · 161 阅读 · 0 评论 -
Redis_客户端
客户端/* With multiplexing we need to take per-client state.* Clients are taken in a liked list.** 因为 I/O 复用的缘故,需要为每个客户端维持一个状态。** 多个客户端状态被服务器用链表连接起来。*/typedef struct redisClient {// 套接字描述符int fd;// 当前正在使用的数据库redisDb *db;// 当...原创 2021-04-19 14:11:21 · 105 阅读 · 0 评论 -
Redis_事件
事件文件事件客户端读,服务端产生写事件时间事件/** 文件事件状态*/// 未设置#define AE_NONE 0// 可读#define AE_READABLE 1// 可写#define AE_WRITABLE 2/** 时间处理器的执行 flags*/// 文件事件#define AE_FILE_EVENTS 1// 时间事件#define AE_TIME_EVENTS 2// 所有事件#define AE_ALL_EVENTS (AE_FILE...原创 2021-04-19 13:16:15 · 71 阅读 · 0 评论 -
Redis_aof
aof配置文件appendonly yesappendfsync always#appendfsync everysec# appendfsync no/** 将命令追加到 AOF 文件中,* 如果 AOF 重写正在进行,那么也将命令追加到 AOF 重写缓存中。*/void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv, int argc) {sds buf =..原创 2021-04-16 16:14:51 · 458 阅读 · 0 评论 -
Redis_RDB
RDB配置文件save 900 1save 300 10save 60 10000结构// 服务器的保存条件(BGSAVE 自动执行的条件)struct saveparam { // 多少秒之内 time_t seconds; // 发生多少次修改 int changes;};int rdbLoad(char *filename, rdbSaveInfo *rsi) { FILE *fp; rio rdb; in...原创 2021-04-15 19:36:47 · 668 阅读 · 0 评论 -
Redis_数据库
数据库/* Redis database representation. There are multiple databases identified* by integers from 0 (the default database) up to the max configured* database. The database number is the 'id' field in the structure. */typedef struct redisDb {//...原创 2021-04-15 14:55:50 · 97 阅读 · 0 评论 -
Redis_对象
对象typedef struct redisObject{ // 类型 unsigned type : 4; // 编码 unsigned encoding : 4; // 对象最后一次被访问的时间 unsigned lru : REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */ // 引用计数 int refcount; // 指向实际值的指针 void...原创 2021-04-14 19:23:20 · 88 阅读 · 0 评论 -
Redis_压缩列表
压缩列表/** 保存 ziplist 节点信息的结构*/typedef struct zlentry {// prevrawlen :前置节点的长度// prevrawlensize :编码 prevrawlen 所需的字节大小unsigned int prevrawlensize, prevrawlen;// len :当前节点值的长度// lensize :编码 len 所需的字节大小unsigned int lensize, len;...原创 2021-04-14 13:56:39 · 99 阅读 · 0 评论 -
Redis_整数
整数typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[];} intset;原创 2021-04-14 11:07:57 · 125 阅读 · 0 评论 -
Redis_跳跃表
跳跃表表节点/* ZSETs use a specialized version of Skiplists *//** 跳跃表节点*/typedef struct zskiplistNode { // 成员对象 robj *obj; // 分值 double score; // 后退指针 struct zskiplistNode *backward; // 层 struct zskiplistLevel { ...原创 2021-04-13 19:45:46 · 97 阅读 · 0 评论 -
Redis_字典
字典一个字典带有两个哈希表,一个平时用,一个reshash用哈希表哈希表节点rehash渐进式地完成,/** 哈希表节点*/typedef struct dictEntry { // 键 void *key; // 值 union { void *val; uint64_t u64; int64_t s64; } v; // 指向下个哈希表节点,形成链表 struct di...原创 2021-04-13 17:03:41 · 82 阅读 · 0 评论 -
Redis_链表
链表/** 双端链表节点*/typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value;} listNode;/** 双端链表结构*/typedef struct list { // 表头节点 listNode *head; // 表尾节点 listN...原创 2021-04-13 11:13:33 · 81 阅读 · 0 评论 -
Redis_字符串
sds simple dynamice string1.常数复杂度获取字符串长度2.杜绝缓冲区溢出3.减少修改字符串时带来的内存重分配次数空间预分配,惰性空间释放4.二进制安全5.兼容部分C字符串函数/** 根据给定的初始化字符串 init 和字符串长度 initlen* 创建一个新的 sds** 参数* init :初始化字符串指针* initlen :初始化字符串的长度** 返回值* sds :创建成功返回 sdshdr 相对应的 sds* 创建失...原创 2021-04-13 10:51:10 · 217 阅读 · 1 评论 -
epoll使用实例
#include <iostream>#include <sys/socket.h>#include <sys/epoll.h>#include <netinet/in.h>#include <arpa/inet.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>#include <errno.h>#include &l原创 2021-01-20 09:29:53 · 268 阅读 · 0 评论 -
c语言---内存对齐
一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。二、为什么要字节对齐需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访问两次内存,第一原创 2017-08-10 14:46:00 · 407 阅读 · 0 评论 -
关键字static
1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址原创 2015-09-26 16:23:38 · 384 阅读 · 0 评论 -
c语言指针类问题
判断指针是否野指针 struct s { int a; char b; }; struct s SS; struct s *p; p->a = 11; //error p=&SS;原创 2017-05-03 10:56:12 · 256 阅读 · 0 评论 -
数据结构---树
//定义二叉链式结构#define QUEUE_MAXSIZE 50typedef char DATA;typedef struct ChainTree{ DATA data; struct ChainTree *left; struct ChainTree *right;}ChainBinTree;//初始转载 2017-05-04 10:24:29 · 228 阅读 · 0 评论 -
c语言---位域
所谓”位域“是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 它实际上是C语言提供的一种数据结构。使用位域的好处是: 1.有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。这样节省存储空间,而且处理简便。 这样就可原创 2017-08-10 13:32:46 · 217 阅读 · 0 评论 -
c语言---数值的上溢和下溢
short、int、long 占用的字节数不同,所能表示的数值范围也不同。以32位平台为例,下面是它们的取值范围:数据类型 所占字节数 取值范围short 2 -32768~32767,即 -215~(215-1)unsigned short 2 0~65535,即 0~(216-1)i原创 2017-08-17 13:45:36 · 3434 阅读 · 0 评论 -
c函数---fgets,fgetc,gets,getchar,getc区别
int getch(void) //从标准输入读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符。也就是,不带回显。int getche(void) //从标准输入读入一个字符,键盘输入的时候,屏幕显示所输入的字符。带回显。这两个函数包含在头文件conio.h中,需要记住的是conio.h不是C标准库中的头文件。Micorsoft 和 Borland的原创 2017-08-09 14:37:46 · 1385 阅读 · 0 评论 -
数据结构---最短路径
void Dijkstra(MatrixGraph G){ int weight[VERTEX_MAX]; int path[VERTEX_MAX]; int tmpvertex[VERTEX_MAX]; int i,j,k,v0,min; printf("\n input source num:"); scanf("%d转载 2017-05-05 11:24:13 · 300 阅读 · 0 评论 -
数据结构---最小生成树
#define USED 0#define NOADJ -1void Prim(MatrixGraph G){ int i,j,k,min,sum = 0; int weight[VERTEX_MAX]; char tmpvertex[VERTEX_MAX]; for(i=1;i { weight[i] = G转载 2017-05-05 10:46:46 · 263 阅读 · 0 评论 -
指针数组与数组指针
a 是指针数据,是指一个数组里面装着指针void test31(){ static int a[2] = {1,2}; int *ptr[5]; int p=5,p2=6,*page,*page2; page = &p; page2 = &p2; ptr[0] = &p;原创 2017-05-04 20:42:03 · 288 阅读 · 0 评论 -
数据结构---线索二叉树
#define QUEUE_MAXSIZE 50typedef char DATA;typedef enum{ SubTree, Thread}NodeFlag;//线索二叉树结构typedef struct ThreadTree{ DATA data; NodeFlag lflag;转载 2017-05-04 11:14:49 · 302 阅读 · 0 评论 -
数据结构---栈
栈是一种线性表的特殊表现形式,与队列的先进先出不同,栈是按照后进先出的原则处理数据。typedef struct { DATA data[SIZE+1]; int top;}SeqStack;SeqStack *SeqStackInit(){ SeqStack *p; if(p = (SeqSt转载 2017-05-04 08:51:50 · 191 阅读 · 0 评论 -
指针内存偏移
void test24(){ class A { public: A() {m_a=1,m_b=2;} ~A(){}; void fun(){printf("%d %d\n",m_a,m_b);} //原创 2017-05-03 21:43:40 · 666 阅读 · 0 评论 -
指针用法---常有问题
void swap1(int p,int q){ int temp; temp = p; p=q; q=temp;}void swap2(int *p,int *q){ int *temp; *temp = *p; *p=*q; *q=*t原创 2017-05-03 20:59:43 · 308 阅读 · 0 评论 -
关键字 volatile
volatile当一个对象可能会在编译器的控制或监测之外被改变时,那么该对象应该声明为volatile原创 2017-05-10 20:58:27 · 174 阅读 · 0 评论 -
循环与数组问题
void test37(){ int x=10;int y =10,i; for(i=0;x>8;y=i++) { printf("%d,%d\n",x--,y); }}void test38(){ int x=10;int y =10,i;转载 2017-05-05 20:56:05 · 347 阅读 · 0 评论 -
常见算法
用来统计每个ascii字符的出现次数,最后给出出现数值 void histogram(char *src){ int i; int hist[256]; for(i=0;i { hist[i] = 0; } while(*src != '\0')转载 2017-05-06 11:26:46 · 334 阅读 · 0 评论 -
c语言---移位问题
在c 中左移也就是所说的逻辑移位,右端补0,而右移是算数移位,左端补齐的是最高位的符号位。故负数左移,有可能变成正数,但负数右移,肯定还是负数。void test(){int a = 10;printf("10 a>>3 %d\n",a>>3);printf("10 aa = -10;printf(" -10 a>>原创 2017-06-25 16:54:43 · 425 阅读 · 0 评论 -
c语言---内存分配问题
内存分配问题内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。原创 2017-06-25 16:50:40 · 357 阅读 · 0 评论 -
c语言的指针数组与数组指针
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2017-06-25 16:35:41 · 222 阅读 · 0 评论 -
c语言---const搭配指针问题
如果const在'*'左边,则表示指针指向的变量的值不可变; 保存的值不变。如果const在'*'右边,则表示指针的值是不可变的; 即是地址不变。void test(){int a = 10;int b = 20;int * const p1 = &a;printf("p1=%d\n",*p1); //10//int * const原创 2017-06-25 15:39:37 · 238 阅读 · 0 评论 -
sizeof 有关用法
测试系统是64位void test15(){ struct { short a1; short a2; short a3; }A; struct { long a原创 2017-05-03 20:16:42 · 288 阅读 · 0 评论 -
数据结构---常用算法
已知先序,中序 ,求二叉树。 BTNode *CreateBT1(char *pre,char *in,int n){ BTNode *s; char *p; int k; if(n return NULL; s = (BTNode*)malloc(sizeof(BTNode) ); s->data = *pre; for(p=in;p原创 2017-06-01 19:52:15 · 249 阅读 · 0 评论