- 博客(37)
- 收藏
- 关注
原创 内存泄露
1、什么是内存泄漏?内存泄漏的危害什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。2、内存泄露分类C/C++程序中一般我们关心两种方面的内存泄漏:堆内存泄漏(Heap leak)堆内存指的是程序执行中依据须要分配通过m
2020-05-08 23:18:36
285
原创 malloc/free和new/delete的区别
malloc/free和new/delete的区别共同点:都是从堆上申请空间,并且需要用户手动释放。不同点:malloc和free是函数,new和delete是操作符。malloc申请的空间不会初始化,new可以初始化。malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可。malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型。malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是ne
2020-05-08 23:06:25
316
原创 取经第一关--函数重载这个小妖精
1、 在说函数重载之前,先体会一个词:多义词。多义词:一个词语有多重含义,只能根据上下文语境来确定该词真正的含义。2、那什么是函数重载呢?先看概念。函数重载: 是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。和多义词有异曲同工之处。int Add(int ...
2020-04-18 21:29:56
243
原创 栈和队列
1.栈栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 类似用一种结构实现尾插尾删的操作。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现:栈的实现一般可以使用数组或者链表实现...
2020-04-15 15:54:41
214
原创 顺序表和链表
1、线性表线性表(linear list) 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。2、顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情...
2020-04-15 15:00:34
137
原创 变态跳台阶-牛客(剑指offer)
题目:思路一:(1)假定第一次跳的是1阶,那么剩下的是n-1个台阶,跳法是f(n-1);假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2);假定第一次跳的是3阶,那么剩下的是n-3个台阶,跳法是f(n-3)…假定第一次跳的是n-1阶,那么剩下的是1个台阶,跳法是f(1); 假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是1种;(2)总跳法为: f(n) = 1+f(n-1...
2020-04-06 20:55:30
163
原创 [编程题]组队竞赛--牛客网
题目:牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。例如:一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2...
2020-03-30 11:50:55
391
原创 213. 打家劫舍 II
题目:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例:结题思路:代码实现:int rob(i...
2020-03-28 13:21:52
106
原创 198.打家劫舍问题(I)
题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。解题思路:代码实现:int rob(int* nums, int numsSize){ if...
2020-03-27 23:12:24
108
原创 探索数据在内存中的存储方式
探索数据在内存中的存储方式 数据是怎么存储的 不同类型是什么样子的32位系统下数据类型:每种数据类型的大小:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ printf("%d\n", sizeof(char));//1 printf("%...
2020-03-05 18:08:09
381
原创 C语言中的截断与整型提升
C语言中的截断与整型提升我们首先来看一段代码:#include<stdio.h>#include<stdlib.h>union Un//--联合体{ char c; int i;};int main(){ //联合变量的定义 union Un un = { 0 }; //计算联合变量的大小 printf("%d\n", sizeof...
2020-03-03 15:17:54
1840
原创 关于函数传参
关于函数传参以交换俩个数字的swap函数为例在C语言中,函数传参有俩种方式:传值和传地址。传值:形参是实参的一份临时拷贝,如果在函数中对形参进行修改,是不会改变外部的实参的。#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<stdlib.h>void swap1(int left, int ...
2020-02-28 16:45:19
178
原创 求1+2+3+......+n
求1+2+3+…+n题目描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题思路:代码实现:class Solution {public: int Sum_Solution(int n) { int ans=n; ans&&(ans+=(Su...
2019-11-20 22:59:05
214
原创 不用加减乘除做加法
不用加减乘除做加法题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:代码实现:class Solution {public: int Add(int num1, int num2) { while(num2!=0) { int temp=num1^num2; ...
2019-11-20 13:20:22
110
原创 linux进程间通信
进程间通信:IPC操作系统为用户提供的几种进程间通信方式。为什么要提供进程间通信给用户?因为进程间具有独立性(每个进程只能访问自己的虚拟地址),无法直接沟通,因此需要操作系统提供公共的媒介。因为通信场景不同,提供了不同的方式。进程间通信场景: 数据传输/数据共享/进程控制进程间通信方式: 管道/共享内存/消息队列/信号量标准:SYSTEM V标准/posix标准1.管道管道: 内核...
2019-11-05 17:50:02
133
原创 初始c++
1. 什么是C++C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出OOP(object oriented programming:面向对象)思想, 支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向...
2019-10-28 21:46:42
210
原创 编译链接的过程、宏替换、条件编译、头文件展开
程序编译链接的过程:宏替换:在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换。替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被它们的值替换。最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。注意:宏参数和#define定义中可以出现其他#define定义的变量...
2019-10-26 22:22:17
546
原创 popen/system, 理解这两个函数和fork的区别
01.popen是标准c提供的一个管道创建函数,其内部操作主要是创建一个管道,调用fork创建子进程,关闭不需用的文件描述符,调用exec函数族执行popen的第一个参数。然后等到关闭。 #include “stdio.h” FILE *popen( const char* command, const char* mode ) 参数说明: command: 是一...
2019-10-26 17:08:05
266
原创 进程的调度算法
进程调度的原因:在操作系统中,由于进程综述多于处理机,它们必然竞争处理机,为了充分利用计算机系统中的CPU资源,让计算机系统能够多快好省的完成我们让它做的各种任务,所以需要进程调度。进程的调度的概念进程调度也称为低级调度(CPU调度),是按照某种调度算法(或原则)从就绪队列中选取进程分配CPU,主要是协调对CPU的争夺使用。通常有以下两种调度方式:1)非剥夺调度方式,又称非抢占方式是指...
2019-10-26 15:10:26
613
原创 进程的调度算法
NOOPNOOP算法的全写为No Operation。该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺序进行操作。之所以说“大致”,原因是NOOP在FIFO的基础上还做了相邻IO请求的合并,并不是完完全全按照先进先出的规则满足IO请求。NOOP假定I/O请求由驱动程序或者设备做了优化或者重排了顺序(就像一个智能控制器完成的工作那样)。在有些SAN环境下,这个选择可能是最好...
2019-10-26 14:58:04
158
原创 task_struct结构体, 理解结构体中的各个字段的含义
task_struct:为了管理进程,操作系统必须对每个进程所做的事情进行清楚的描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块(PCB)。在linux操作系统下这就是task_struct结构 ,所属的头文件#include <sched.h>每个进程都会被分配一个task_struct结构,它包含了这个进程的所有信息,在...
2019-10-26 14:55:41
386
原创 Linux下软件安装的几种方式(源码安装, rpm安装, yum安装)
01.源码安装优点:1、文档齐全2、因为可以定位到代码,所以debug方便3、本机兼容性最好(由于是本机编译的,只要编译通过,就没有各种库的依赖的问题)缺点:1、编译麻烦2、缺乏自动依赖管理,软件升级麻烦安装流程:1.3.1 解压源码包tar文件:源码包通常会使用tar工具归档然后使用gunzip或bzip2进行压缩,后缀格式会分别为.tar.gz与.tar.bz2,...
2019-10-26 14:39:19
268
原创 除了gcc, 还有哪些常用的牛逼的编译器?
01.ClangClang是一个C语言、C++、Objective-C语言的轻量级编译器。源代码发布于BSD协议下。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。它与GNU C语言规范几乎完全兼容(...
2019-10-26 14:16:10
5852
1
原创 除了vim, 还有哪些常用的牛逼的编辑器?
除了vim, 还有哪些常用的牛逼的编辑器呢?01.EclipseEclipse是一款很酷的开源代码编辑器,它拥有代码高亮和智能提示等强大的功能。在Eclipse中,完全胜任以下编程语言的工作——Python, R, Ruby, JavaScript, Natural, Lasso, C, C++, COBOL, Scheme, Clojure, Groovy等等,它也是Java集成开发环境,甚...
2019-10-26 13:55:37
1055
原创 Linux基础指令(文件相关命令+查找匹配命令)
文件相关命令09.cat指令语法: cat [选项][文件]功能: 查看目标文件的内容(打印文件内容到中断显示)。常用选项:-b 对非空输出行编号-n 对输出的所有行编号-s 不输出多行空行10.more指令语法: more [选项][文件]功能: more命令,功能类似 cat (分页显示文件内容)。常用选项:-n 对输出的所有行编号回车 按行向下滚动空格...
2019-10-25 21:11:11
450
原创 Linux基础指令(目录相关指令)
目录相关命令:01. ls 指令语法: ls [选项][目录或文件]功能: 对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a:显示指定目录下隐藏文件。(Linux下以 . 开头的文件是隐藏文件)。-l:显示文件详细信息:以-开头普通文件以l开头符号链接文件以c开头字符设备文件以d开头文件夹文件以b开头块设备文件以p开头管...
2019-10-24 23:20:23
139
原创 如何使用命令安装gcc/g++, gdb, vim
如何使用命令安装gcc/g++, gdb, vim1、安装gcc/g++查找。通过yum list命令可以罗列出当前一共有哪些软件包,由于包的数量可能非常多,这里我们需要使用grep命令筛选出我们需要的包。yum list | grep lrzsz安装。通过yum,使用一条命令完成gcc的安装。sudo yum install lrzsz卸载软件。也可以通过一条命令来删除软件。...
2019-10-10 17:56:59
245
原创 Linux重要命令. du, df, top, free, pstack, su, sudo(sudo -, sudo -s), adduser, password
Linux重要命令. du, df, top, free, pstack, su, sudo(sudo -, sudo -s), adduser, passworddu 指令格式:du [选项] [文件]功能:显示每个文件和目录的磁盘使用空间。df 指令格式:df [选项] [文件]功能:可显示目前所有文件系统的可用空间及使用情况(动态显示过程);查看哪一级文件大小、使用比例、档案系统...
2019-10-10 17:40:53
201
原创 Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp
Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp/proc:Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程...
2019-10-10 17:23:24
185
原创 排序算法总结
排序算法总结【目录】1.排序的概念及其运用2.常见排序算法的实现3.排序算法复杂度及稳定性分析1.排序的概念及其运用排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。**稳定性:**假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前...
2019-07-30 17:33:05
198
原创 newcoder【链表分割】
newcoder【链表分割】题目描述:编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前。给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。来源:牛客(newcoder)链接:https://www.nowcoder.com/practice/0e27e0b064de4eaca...
2019-07-22 16:05:31
146
原创 LeetCode【21.合并俩个有序链表】
LeetCode【21.合并俩个有序链表】题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/...
2019-07-22 15:31:57
91
原创 newcoder【链表中倒数第k个结点】
newcoder【链表中倒数第k个结点】题目描述:输入一个链表,输出该链表中倒数第k个结点。来源:牛客(newcoder)链接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId思路:使用快慢指针slow,fast解决这个问题,快指针fast比慢指针slow快k步。如果fast不为空,则迭代...
2019-07-22 15:12:18
77
原创 LeetCode【876.链表的中间结点】
LeetCode【876.链表的中间结点】题目描述:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5]) 返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。 注意,我们返回了一个 ListNode 类型的对象 ans...
2019-07-22 14:27:27
112
原创 LeetCode【203.移除链表的元素】
LeetCode【203.移除链表的元素】题目描述:删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5思路:1.得有一个节点prev记录被删除节点的前驱节点,还得有一个节点next记录被删除节点的后继结点。2.要先判断链表是...
2019-07-20 17:07:32
114
原创 时间/空间复杂度分析
时间/空间复杂度分析1. 算法效率2. 时间复杂度3. 时间复杂度1.算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,空间效率被称为空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度(性能),而空间复杂度主要衡量的是一个算法所需要的额外空间(占用内存)。在计算机发展的早期,计算机的存储容量很小,所以对空间复杂度很是在乎。但是经过计算机行业...
2019-07-20 14:47:10
211
原创 打印100~200之间的素数
打印100~200之间的素数方法一:素数:除了1和它本身,不能被其他自然数整除。用它本身去对2到它本身减去1的数进行取余运算。代码1:#include<stdio.h>#include<Windows.h>int main(){ int i=0; int j=0; int count=0; printf("100-200间的素数有:\n"); for...
2019-03-21 22:00:23
187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人