C
文章平均质量分 62
rugu-sco
记得一定要快乐
展开
-
通讯录--动态开辟内存+文件存储
终极版–增删改查 排序 动态开辟内存 文件存储 addressbook.h#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>#include<string.h>#define DEFAULT_SZ 3//初始通讯录大小为3...原创 2018-03-15 20:17:54 · 286 阅读 · 0 评论 -
栈和队列经典试题
01.实现一个栈,要求实现Push、Pop、Min(返回最小值)的时间复杂度为O(1)思路:我们知道取栈顶元素的时间复杂度为O(1), 如果栈顶元素就是最小的就好了,所以我们每次入栈之前, 先与栈顶元素比较如果大于栈顶元素, 就把栈顶元素保存一份, 先入栈要入栈的元素, 再入栈栈顶元素如果小于栈顶元素就直接入栈两次这个元素同样, 出栈也要每次出两个元素例如:要入栈的是5, 当前栈顶元...原创 2018-04-12 14:30:34 · 831 阅读 · 0 评论 -
关于write和read以及文件读写位置
write#include <unistd.h>ssize_t write(int fd, const void *buf, size_t nbyte);fd:文件描述符 buf:指定的缓冲区,即指针,指向一段内存单元 nbyte:要写入文件指定的字节数 返回值:写入文档的字节数(成功);-1(出错) write函数把buf中nbyte写入文件描述符handle所...原创 2018-04-19 10:25:06 · 12749 阅读 · 0 评论 -
C语言经典项目之二——扫雷
扫雷是一款家喻户晓的windows自带游戏,为了提高初学者学习兴趣,扫雷也是一个经典的C语言项目,今天就给大家分享一下。我这个版本提供了可展开,第一次不会被炸死的功能。/*================================================================# File Name: game.h# Author: rjm# mail...原创 2017-12-16 13:58:11 · 1346 阅读 · 0 评论 -
C/C++ 二维数组传参方法总结
1, 形参为二维数组, 并给定第二维长度此方法是最简单最直观的方法,形参与实参一样,容易理解。int arr[][3]以杨氏矩阵查找问题为例int findNumInYangTableau(int arr[][3], int rows, int cols, int num){ if(arr != NULL && rows > 0 &&...原创 2018-04-26 20:57:39 · 16123 阅读 · 3 评论 -
二叉搜索树的基本操作(递归和非递归)
二叉搜索树任意一个节点的左孩子小于它, 右孩子大于它 二叉搜索树的中序遍历结果是有序的基本操作初始化插入节点查找节点删除节点头文件/*================================================================# File Name: binary_search_tree.h# Author: rjm...原创 2018-05-17 19:39:55 · 259 阅读 · 0 评论 -
二叉树的基本操作
二叉树的基础知识一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的二叉树组成的二叉树的特点每个结点最多有两棵子树,即二叉树不存在度大于2的结点,二叉树的子树有左右之分,其子树的次序不能颠倒满二叉树&amp;amp;完全二叉树满二叉树在一棵二叉树中,如果所有分支结点都存在左子树和右子树, 并且所有叶子节点都在同一层上,则称...原创 2018-04-28 11:20:14 · 305 阅读 · 0 评论 -
注释转换_(C风格转为C++风格)
注释转换思路: 我们先来看一下C风格的注释, 大概有这几种情况// 1.一般情况/* int i = 0; */// 2.换行问题/* int i = 0; */int j = 0;/* int i = 0; */int j = 0;// 3.匹配问题/*int i = 0;/*xxxxx*/// 4.多行注释问题/*int i=0;int j = 0;in...原创 2018-05-13 15:08:47 · 344 阅读 · 0 评论 -
堆的基本操作
堆的性质首先, 这个堆和堆栈那个堆没有一点关系 这个堆就是一棵完全二叉树 分为大堆和小堆 满足以下性质 如果是大堆, 那么任意根节点的孩子节点都比它小 如果是小堆, 那么任意根节点的孩子节点都比它大 堆的基本操作初始化插入删除取堆顶元素销毁堆排序我们每次插入完或者删除完以后, 这个堆仍然要满足堆的性质, 所以就需要在插入删除以后再做一些操作, 使元素上...原创 2018-05-13 16:04:04 · 218 阅读 · 0 评论 -
哈希表的基本操作
哈希表若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f()为散列函数,按这个思想建立的表为散列表(即哈希表).对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2) 这种现象称为碰撞散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位.散列函数有很多种 常用的有:直接...原创 2018-05-20 21:20:38 · 3600 阅读 · 0 评论 -
位图与布隆过滤器
位图用来快速判断一个整数是否在一堆整数中 二进制用0和1来表示数据,位图根据0和1来存储对应的数据,可以大大节省存储空间,并具备排序特性。例如数组:int arr[ ] = {1,31,53,41,79,201}创建字符数组 int bitmap[26](因为数字最大数201,26 * 8=208 &lt; 201)遍历字符数组的每一位,设置 0 或者 1通过设置 0 或者...原创 2018-06-02 20:56:12 · 1929 阅读 · 0 评论 -
基本排序算法
冒泡排序基本步骤:从第一个元素开始, 依次比较相邻两个元素的大小, 如果前面的大于后面的, 就交换, 交换完, 此时, 最后一个元素就是最大的.然后除了最后一个元素, 其余元素再重复以上步骤直到需要比较的元素越来越少, 只剩最后一个, 此时就有序了.///////////////////////////////////////////////// 1, 冒泡排序// ...原创 2018-05-29 20:54:19 · 224 阅读 · 0 评论 -
静态库和动态库
静态库和动态库程序编译的四个阶段预处理编译汇编链接每个阶段所做的工作1, 预处理 宏替换 , 文件包含 (头文件展开等) , 条件编译 , 去注释 预处理指令是以 # 开头的代码行 gcc -E test.c -o test.i 选项 -E 是让编译器在预处理过后停止编译 选项 -o 是指目标文件 , .i 文件是预处理...原创 2018-07-28 15:01:08 · 223 阅读 · 0 评论 -
static关键字
static关键字static 三大用法静态全局变量静态局部变量静态函数1. 静态全局变量一个进程在内存中的布局如下图所示:其中.text 段 存储进程执行程序的二进制文件.data 段 存储进程中已初始化的全局变量.bss 段 存储进程中未初始化的全局变量将一个全局变量用 static 修饰以后, 它的存储位置并没有什么不同, 还是在 .da...原创 2018-08-10 18:08:05 · 178 阅读 · 0 评论 -
栈的应用 -- 迷宫求解
迷宫求解0 0 1 0 0 00 0 1 1 1 01 1 1 0 1 10 0 1 0 1 00 0 1 1 1 10 0 0 0 0 0如上图所示的一个迷宫, 0为墙, 1为路, 编写程序求解1) 求简单迷宫是否存在路径 2) 求多出口迷宫的最短路径 3) 求带环的多出口迷宫的最短路径思...原创 2018-04-17 16:22:01 · 3232 阅读 · 0 评论 -
简析sscanf sprintf 与fread fwrite
1.sscanf 函数原型 int sscanf(const char *buffer, const char *format, [ argument ] … ); buffer 存储的数据其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ’ ’ | ‘/t’ | ‘/n’ | 非%符号}1、星号亦可用于...原创 2018-03-15 21:15:26 · 368 阅读 · 0 评论 -
通讯录--动态开辟内存版
和上次的通讯录差不多,只是上次固定了通讯录的容量,这次加入了动态开辟内存,在容量不够时申请空间。 addressbook.h#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>#include<string.h>#def...原创 2018-03-13 19:06:43 · 204 阅读 · 0 评论 -
内存管理那些事儿_指针参数是如何传递内存的?
01.如果函数的参数是一个指针,不要指望用该指针去申请动态内存void getmemory(char *p){ p = (char *)malloc(100);}int main(){ char *str = NULL; getmemory(str); strcpy(str, "hello"); printf(str); print...原创 2018-03-13 12:25:44 · 159 阅读 · 0 评论 -
C语言小项目--通讯录
一个简单的通讯录程序 AddressBook.h#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>#include<string.h>#define MAX_SIZE 1000struct people{ ...原创 2018-03-11 20:48:39 · 438 阅读 · 0 评论 -
数据结构--顺序表
C语言实现顺序表 增 删 改 查 排序#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>#define MAX_SIZE 10typedef int DataType;//定义一个顺序表typedef struct SeqLis...原创 2018-03-10 21:34:23 · 187 阅读 · 0 评论 -
C语言_自定义类型_枚举 联合
C语言的自定义类型除了结构体之外,还有枚举,联合。枚举顾名思义,就是一一列举。 枚举类型的定义enum Sex//性别{ MALE, FEMALE, SECRET};enum Color//颜⾊{ RED, GREEN, BLUE};以上定义的 enum Sex , enum Color 都是枚举类型。 ...原创 2018-03-09 14:07:20 · 346 阅读 · 0 评论 -
C语言_自定义类型之结构体
即使C语言本身已经有很多种类型,但在实际应用中还是不够的,我们还需要有一些自定义的类型,例如结构体,联合,枚举结构体结构体的类型创建://例如描述一个学生struct Student //Student叫做结构体标签{ char name[20];//这里的name age sex class 叫做结构体成员 int age; char sex[...原创 2018-03-09 11:39:30 · 1655 阅读 · 0 评论 -
单链表的基本操作
数据结构-单链表-基本操作-C语言实现 LinkList.h#include<stdio.h>#include<stdlib.h>#define TEST_HEAD printf("=====%s=====\n", __FUNCTION__);typedef int ElemType; typedef struct LinkList{ ...原创 2018-03-20 14:59:22 · 292 阅读 · 0 评论 -
简单实现myshell
一个简易的myshellfock函数//fork函数 创建子进程pid_t fork(void);execvp函数//进程替换int execvp(const char *file ,char * const argv []);waitpid函数//进程等待pid_t waitpid(pid_t pid,int * status,int options);...原创 2018-03-24 21:27:46 · 1036 阅读 · 0 评论 -
封装 fork wait execvp, 编写函数 process_create
利用回调函数封装fork wait execvp 等函数, 编写一个progress_create函数#include<stdio.h>#include<stdlib.h>#include<unistd.h>int process_create(int(*func)(), const char *file, char *argv[]){ ...原创 2018-03-25 09:51:54 · 442 阅读 · 1 评论 -
栈的两种实现
顺序表实现栈#include <stdio.h>#include <stdlib.h>//顺序表实现栈#define TEST_HEAD printf("\n======%s======\n", __FUNCTION__);#define DEFAULT_SZ 5typedef char DataType;typedef struct seqSt...原创 2018-04-08 13:03:08 · 217 阅读 · 0 评论 -
队列的两种实现
顺序表实现队列#include <stdio.h>#include <stdlib.h>//顺序表实现队列#define TEST_HEAD printf("\n=====%s=====\n", __FUNCTION__)#define DEFAULT_SZ 5typedef char DataType;typedef struct seqQu...原创 2018-04-08 19:44:49 · 255 阅读 · 0 评论 -
单链表经典试题
逆序打印单链表void LinkListReversePrint(LinkNode* head); 思路:使用递归, 通过栈的后进先出特性, 实现单链表的逆序输出不允许遍历链表, 在 pos 之前插入void LinkListInsertBefore(LinkNode** head, LinkNode* pos, ...原创 2018-03-27 19:52:13 · 566 阅读 · 0 评论 -
内存泄漏检测
内存泄漏检测什么是内存泄漏?内存泄漏不是指物理内存的消失, 而是失去了对这块内存的控制, 导致内存浪费对于 C/C++ 这种没有垃圾回收机制的语言来说, 我们一般关注两种类型的内存泄漏堆内存泄漏: malloc或new出来的空间没有free/delete系统资源泄漏: 申请的某些系统资源没有调用相关函数释放例如: 文件描述符fd, 套接字socket如何检测内存泄...原创 2018-09-22 01:08:33 · 727 阅读 · 0 评论