06 2018 档案

摘要:链队列 链队列就是简化了的单链表 nodequeue.h nodequeue.c nodequeuemain.c 阅读全文
posted @ 2018-06-30 11:17 小石王 阅读(282) 评论(0) 推荐(0) 编辑
摘要:线性队列 队列是先进先出,和栈相反. 不循环的队列就是浪费空间,如果tail到了最大值后,即使前面出队了,有空的位置,也不能再入队。 seqqueue.h seqqueue.c whilequeuemain.c 阅读全文
posted @ 2018-06-30 11:10 小石王 阅读(222) 评论(0) 推荐(0) 编辑
摘要:线性循环队列 队列是先进先出,和栈相反. 线性循环队列,牺牲一个空间,实现循环。比如空间大小为4,牺牲一个空间,所以最多放3个元素。 假设front指向0位置,tail指向3位置 | 1 | 2 | 3 | 空 | | | | | | 出队后 front指向1位置,tail位置不变还是3 | 空 | 阅读全文
posted @ 2018-06-30 10:59 小石王 阅读(260) 评论(0) 推荐(0) 编辑
摘要:栈的应用 1,进制转换 把十进制转换成二进制 思路:要转换成几进制,就除以几,比如要转换成二进制,就每次除以2;比如要转换成16进制,就每次除以16;直到除没了为止。每次除之前,取模。把每次取到的模,压入栈。栈顶的值就是二进制的最大位,所以打印的时候,从栈顶开始打印。 2.各种括号配对 检查各种括号 阅读全文
posted @ 2018-06-29 15:51 小石王 阅读(217) 评论(0) 推荐(0) 编辑
摘要:c/c++ 链栈 链栈 下面的代码实现了以下功能 | 函数 | 功能描述 | | | | | push | 压入 | | pop | 弹出 | | show_list | 打印 | | clear | 释放所有内存空间 | | destroy | 释放所有内存空间 | nodestack.h nod 阅读全文
posted @ 2018-06-29 15:33 小石王 阅读(280) 评论(0) 推荐(0) 编辑
摘要:c/c++ 线性栈 线性栈 下面的代码实现了以下功能 | 函数 | 功能描述 | | | | | push | 压入 | | pop | 弹出 | | show_list | 打印 | | clear | 移动top指针到栈底 | | destroy | 释放所有内存空间 | seqstack.h 阅读全文
posted @ 2018-06-28 21:13 小石王 阅读(192) 评论(0) 推荐(0) 编辑
摘要:c/c++ 线性表之双向循环链表 线性表之双向循环链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,每个节点的before都指向前一个节点,最后一个节点的下一个节点不是NULL,是头节点。 真实的第一个节点是头节点,头节点不存放数据,单纯为了编写程序方便。但是下面注释里写的 阅读全文
posted @ 2018-06-28 15:04 小石王 阅读(224) 评论(0) 推荐(0) 编辑
摘要:c/c++ 线性表之双向链表 线性表之双向链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,每个节点的before都指向前一个节点,最后一个节点的下一个节点是NULL。 真实的第一个节点是头节点,头节点不存放数据,单纯为了编写程序方便。但是下面注释里写的【第一个节点】的含义 阅读全文
posted @ 2018-06-28 09:37 小石王 阅读(264) 评论(0) 推荐(0) 编辑
摘要:c/c++ 线性表之单向循环链表 线性表之单向循环链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,最后一个节点的下一个节点不是NULL,而是头节点。因为头尾相连,所以叫单向循环链表。 真实的第一个节点是头节点,头节点不存放数据,单纯为了编写程序方便。但是下面注释里写的【第 阅读全文
posted @ 2018-06-27 07:17 小石王 阅读(947) 评论(0) 推荐(0) 编辑
摘要:c/c++ 线性表之单向链表 线性表之单向链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,最后一个节点的下一个节点是NULL。 真实的第一个节点是头节点,头节点不存放数据,单纯为了编写程序方便。但是下面注释里写的【第一个节点】的含义是头节点的下一节点,也就是真实存放数据的 阅读全文
posted @ 2018-06-23 15:12 小石王 阅读(412) 评论(0) 推荐(0) 编辑
摘要:线性表之顺序表 存储在连续的内存空间,和数组一样。 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit)。 实现了以下功能: | 函数 | 功能描述 | | | | | push_back | 从最后插入 | | push_front | 从 阅读全文
posted @ 2018-06-21 09:58 小石王 阅读(303) 评论(0) 推荐(0) 编辑
摘要:```list ;;跳转到函数定义的地方 (global-set-key (kbd "C-") 'ggtags-find-definition) ; Control+F2 ;;跳转到函数定义的地方后,返回到原来的地方 (global-set-key (kbd "C-") 'ggtags-prev-mark) ; Control+F3 ;;找出所有调用了这个函数的地方 (global-set-key... 阅读全文
posted @ 2018-06-20 17:12 小石王 阅读(510) 评论(0) 推荐(0) 编辑
摘要:在emacs编程中有以下需求 从调用一个函数的地方跳转到函数的定义的地方 或是反过来从函数定义的地方列出所有调用这个函数的地方 实现办法 需要安装以下软件 gnu global(阅读源代码的工具)官网 emacs的gtags插件 启动emacs后,输入下面的命令,来启动gtags的功能 M-x gg 阅读全文
posted @ 2018-06-20 16:21 小石王 阅读(1173) 评论(0) 推荐(0) 编辑
摘要:柔性数组成员 定义和声明分离 结构体里有指向字符串指针 结构体里如果有指向字符串指针,就会发生字符串在结构体的外面,不能由结构体来统一管理。 解决办法: 上面的代码有个弊端,就是访问那个str时,需要使用不容易理解的tp+1,改进如下。 为什么,虽然没有对t.pc赋值,但是打印出了正确的数据呢? 方 阅读全文
posted @ 2018-06-19 17:21 小石王 阅读(198) 评论(0) 推荐(0) 编辑
摘要:柔性数组成员 定义和声明分离 结构体里有指向字符串指针 结构体里如果有指向字符串指针,就会发生字符串在结构体的外面,不能有结构体来统一管理。 解决办法: 上面的代码有个弊端,就是访问哪个str时,需要使用不容易理解的tp+1,改进如下。 为什么,虽然没有对t.pc赋值,但是打印出了正确的数据呢? 方 阅读全文
posted @ 2018-06-15 18:43 小石王 阅读(750) 评论(0) 推荐(0) 编辑
摘要:c 字节对齐 概念: 结构体里会包括各种类型的成员,比如int char long等等,它们要占用的空间不同,系统为一个结构体开辟内存空间时,会有2种选择。 第一种:节省空间的方案,以上面的列子来说的话,就是4(int) + 1(char) + 8(long) =13个字节; 第二种:浪费空间的方案 阅读全文
posted @ 2018-06-15 16:13 小石王 阅读(942) 评论(0) 推荐(0) 编辑
摘要:memset memcmp memcpy memmove 自己实现 memset c include include include include void my_memcpy(void dest, const void src, size_t cnt){ assert(NULL != dest 阅读全文
posted @ 2018-06-14 22:46 小石王 阅读(424) 评论(0) 推荐(0) 编辑
摘要:strlen strcat strcpy strcmp 自己实现 strlen strcat strcpy strcmp c include include include include int my_strcmp(const char s1, const char s2){ assert(NUL 阅读全文
posted @ 2018-06-12 22:54 小石王 阅读(435) 评论(0) 推荐(0) 编辑
摘要:用双引号定义并且声明的时候明确指定数组大小的话,sizeof就会返回指定的大小,不会自动加1; 用大括号定义并且声明的时候明确指定数组大小的话,sizeof就会返回指定的大小,不会自动加1; 用双引号定义并且声明的时候没有明确指定数组大小的话,sizeof就会是实际的大小+1;strlen也正常 用 阅读全文
posted @ 2018-06-12 17:17 小石王 阅读(337) 评论(0) 推荐(1) 编辑
摘要:```c include include void fun(int a){ printf("fun:%d\n", a); } void fun1(void ( f)(int),int a){ f(a); } int gun(int a){ printf("gun:%d\n", a); } int g 阅读全文
posted @ 2018-06-12 14:28 小石王 阅读(237) 评论(0) 推荐(0) 编辑
摘要:函数指针的返回值是指针数组,数组里放的是int 函数指针的返回值是指针数组,数组里放的是int指针 c include include void fun(int a){ printf("fun:%d\n", a); } void fun1(void ( f)(int),int a){ f(a); } 阅读全文
posted @ 2018-06-11 22:44 小石王 阅读(477) 评论(0) 推荐(0) 编辑
摘要:函数指针,函数的返回值是数组 上面的代码是声明一个函数指针,这个函数有2个int指针参数,返回值是指针,指向的是数组,数组里放的是int指针。但是,实际用代码验证一下,并不是想象的那样。 结论:只要参数一样,返回值不管是int指针数组,int数组,还是int,编译都会通过,执行没有问题。但是编译时有 阅读全文
posted @ 2018-06-11 18:02 小石王 阅读(290) 评论(0) 推荐(0) 编辑
摘要:指针函数,函数指针 阅读全文
posted @ 2018-06-10 21:50 小石王 阅读(362) 评论(0) 推荐(0) 编辑
摘要:指针类型的作用 任何类型的指针占用的空间大小都是相同的(32位CPU是4字节;64位CPU是8字节) 既然任何类型的指针占用的空间大小都是相同的,为什么指针还需要类型呢?指针只是指向了一个内存地址,但是当存内存中取值的时候,系统不知道你要从当前指针指向的地址,取几个字节,指定了指针的类型后,系统就知 阅读全文
posted @ 2018-06-10 11:24 小石王 阅读(1861) 评论(1) 推荐(1) 编辑
摘要:文件读写 fprintf,fscanf fprintf gets sizfof, strlen的疑惑:https://www.cnblogs.com/zpcdbky/p/5857656.html 阅读全文
posted @ 2018-06-09 12:40 小石王 阅读(225) 评论(0) 推荐(0) 编辑
摘要:define和typedef的区别 define是单纯的字符替换,typedef是重新定义了新的类型 阅读全文
posted @ 2018-06-09 07:30 小石王 阅读(319) 评论(0) 推荐(1) 编辑
摘要:realloc 用方法 void realloc(void , n) 根据n的大小,如果n比较小,就沿用原来的内存地址(也就是返回的地址就是原来的地址),在原来地址的内存空间的最后面,加上n大小的内存空间;如果n比较大,系统就不会沿用原来的内存地址,系统有新开辟一个内存空间,并把原来内存空间里存放的 阅读全文
posted @ 2018-06-08 21:49 小石王 阅读(877) 评论(0) 推荐(0) 编辑
摘要:malloc和calloc用法 c include include int main(){ int n; printf("input n: "); scanf("%d", &n); //一个参数,指定具体空间的大小 int p = (int )malloc(sizeof(int) n); if(NU 阅读全文
posted @ 2018-06-08 18:10 小石王 阅读(384) 评论(0) 推荐(0) 编辑
摘要:数组指针 (gdb) p p1 $1 = (int ) 0x7fffffffe1c0 // (int ) 是指针的类型 (gdb) p p2 $2 = (int ) 0x7fffffffe1c0 // (int ) 是指针的类型 (gdb) p p3 $3 = (int ( )[10]) 0x7ff 阅读全文
posted @ 2018-06-08 17:12 小石王 阅读(201) 评论(0) 推荐(0) 编辑
摘要:```c #include int max(int a, int b){ return a > b ? a : b; } int min(int a, int b){ return a > b ? b : a ; } //把函数指针作为函数的参数,最后一个参数是指针函数 int exe(int a, int b, int(*pf)(int, int)){ return (*pf... 阅读全文
posted @ 2018-06-08 16:07 小石王 阅读(133) 评论(0) 推荐(0) 编辑
摘要:异常处理 1.异常基本概念与用法 方法内throw throw啥类型,catch就需要指定成啥类型,否则,就catch不到, 但是如果有catch(…),当它上面的catch都没有catch到,就会被catch(…) catch到。而且catch(…)必须放到最后。 c++ include usin 阅读全文
posted @ 2018-06-06 07:05 小石王 阅读(194) 评论(0) 推荐(0) 编辑
摘要:c++文件的读写 1.文本方式的写文件 3.二进制方式的写文件 c++ include include using namespace std; int main(){ int ar[] = {11,232,123123,1223,455,4,4,5,56,4,33}; ofstream ofile 阅读全文
posted @ 2018-06-05 22:22 小石王 阅读(346) 评论(0) 推荐(0) 编辑
摘要:纯虚函数 1.有纯虚函数的类,是抽象类。抽象类不可以被实例化。但是可以定义抽象类的指针。 2.当继承父类是抽象类的时候,子类必须全部覆盖父类的纯虚函数后,才可以被实例化。 阅读全文
posted @ 2018-06-05 17:29 小石王 阅读(275) 评论(0) 推荐(0) 编辑
摘要:1.虚函数的关键字virtual只能用在声明的地方,实现的地方不用加 3.虚函数只能是类的成员函数,它就是为了实现多态而生的。不能是全局函数。 4.静态(static)函数不可以是虚函数 5.内联函数不可以是虚函数 6.父类的析构函数必须是虚函数。 动态创建父类的时候,当delete父类对象的时候, 阅读全文
posted @ 2018-06-05 10:58 小石王 阅读(255) 评论(0) 推荐(0) 编辑
摘要:继承时,构造函数和析构函数的调用顺序 1. 先调用父类的构造函数,再初始化成员,最后调用自己的构造函数 2.先调用自己的析构函数,再析构成员,最后调用父类的析构函数 3.如果父类定义了有参数的构造函数,则自己也必须自定义带参数的构造函数 4.父类的构造函数必须是参数列表形式的 5.多继承时,clas 阅读全文
posted @ 2018-06-04 21:58 小石王 阅读(2116) 评论(0) 推荐(0) 编辑
摘要:一,public protected private继承 1,public继承 ​ 父类的所有public属性,在子类中也是public。父类的protected属性,在子类中也是protected 2,protected继承 ​ 父类的所有public属性,在子类中是 protected 。父类的 阅读全文
posted @ 2018-06-04 16:34 小石王 阅读(135) 评论(0) 推荐(0) 编辑
摘要:1,创建秘钥 $ ssh-keygen -t rsa -C "youremail@example.com"执行成功后,会在~/.ssh/目录下生成id_rsa和id_rsa.pub这两个文件id_rsa.pub的作用是在github里输入用。 生成秘钥的目的是,git push到github的时候, 阅读全文
posted @ 2018-06-03 11:08 小石王 阅读(168) 评论(0) 推荐(0) 编辑
摘要:一,centos7下安装(因为centos7下用yum安装git的版本太低了,所以只能下载源代码,然后用源代码安装) 下载编译工具 yum -y groupinstall "Development Tools" 下载依赖包 yum -y install zlib-devel perl-ExtUtil 阅读全文
posted @ 2018-06-03 10:53 小石王 阅读(274) 评论(0) 推荐(0) 编辑
摘要:1,创建GIT代码仓库 git init 2,添加修改到缓存区 git add filename · git add -A 提交所有变化 · git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new) · git add . 提交新文件(new)和被修 阅读全文
posted @ 2018-06-02 22:00 小石王 阅读(128) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示