- 博客(83)
- 收藏
- 关注
原创 文件(Linux)
在C语言阶段已经了解过文件的相关操作,在这里对C语言中的文件操作就不赘述了:需要了解C语言文件相关操作的请戳这里????C语言文件相关操作。在Linux系统里文件操作又是怎么一回事呢?跟着我的节奏,我们一起来了解一下。Linux文件一、系统文件I/O一、什么是系统文件I/O操作文件的方式,除了之前了解过的C语言文件操作接口之外,我们还可以采用系统接口来进行文件访问。(当然...
2020-02-26 16:38:28
235
原创 文件相关操作(C语言)
文件:一、文件分类在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。1、程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀 为.exe)。2、数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。以前大多数处理数据的输入输出都是以...
2020-01-15 19:20:12
510
原创 进程程序替换--模拟实现简易shell
替换原理用fork创建子进程之后执行的是和父进程相同的程序,接下来的代码由哪个进程去执行就看调度器具体调度了。但是往往父子进程需要执行不同的代码分支,这时候子进程就需要调用一种exec函数以执行另一个程序分支。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动开始执行。调用exec函数并不创建新进程,所以调用exec前后该进程的id并未改变。...
2020-01-08 00:36:57
244
原创 进程等待
进程等待的必要性子进程退出,父进程如果不管不顾,就会造成“僵尸进程”,从而造成内存泄漏等问题。 进程一旦进入僵尸进程状态,就刀枪不入,kill -9 也无法杀死。 父进程给子进程派出的任务完成情况,不进行进程等待就无法获取。如:子进程运行完成,结果是否正确;程序是否正常退出。 父进程通过进程等待的方式,回收子进程资源,获取子进程的退出信息。进程等待方法wait1、函数使用...
2020-01-06 15:12:55
280
原创 进程终止(exit 和 _exit)
进程退出场景代码运行结束,结果正确 代码运行结束,结果不正确 代码异常终止进程常见的退出方法1、正常退出(可通过指令 :echo $? 查看进程退出码($?是bash中的特殊变量,表示上个命令对应的进程退出码))从main函数返回(main函数为程序入口函数,其返回值为进程退出码,0表示结果正确,非0表示结果不正确) 调用exit(例如:exit(1)任何函数中可用;本...
2020-01-05 19:59:04
519
原创 fork
fork函数作用在前面的博客中已经提到过fork这个函数,它的作用就是从已存在的进程中创建一个新进程。新进程为子进程,而原来的进程为父进程。返回值-1 创建失败 0 创建成功,且为子进程的返回值 >1 创建成功,且为父进程的返回值,返回值为子进程pid 在fork函数期间,内核会做什么?以父进程为模版,创建子进程 把父进程的PCB...
2020-01-05 19:15:37
143
原创 环境变量
环境变量是什么?环境变量一般指的是在操作系统中用来指定操作系统运行环境的一些参数的变量。例:我们在编写C/C++代码时,需要链接动态/静态库,但是我们不知道这些库在哪,也可以链接成功,生成可执行程序,原因就是有相关的环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,在系统通常具有全局特性。常见的环境变量有哪些?PATH 指定命令的搜索路径(去路径目录中搜索可...
2020-01-04 12:16:30
185
原创 进程
进程1、什么是进程?进程指的是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。2、什么是程序?计算机程序又称为“计算机软件”,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。3、程序与进程的区别?1、程序是永存的,而进程只是暂时的,是程序在...
2020-01-04 00:08:59
434
原创 Linux 第一个小程序---进度条
命令行版本简易进度条现象[4%][|][#####]简易进度条代码#include<stdio.h>#include<unistd.h>//命令行版本的进度条程序int main(){ //#表示进度条 const char* lable = "|/-\\"; char buf[1024]={0}; int i=0; for(; ...
2019-12-23 12:31:25
190
原创 二叉搜索树的模拟实现与总结
什么是二叉搜索树?二叉搜索树又称二叉排序树。(⚠️:空树也是一颗二叉搜索树)二叉搜索树的性质:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。 他的左右子树也分别为二叉搜索树。如何验证一个树是不是二叉搜索树?搜索二叉搜索树的中序遍历一定是一个有序的数据集合。 二叉搜索树的最左边节点一定是最小的节点。...
2019-12-20 11:16:38
226
原创 八大经典排序(C++实现)
排序分类:各类排序算法复杂度:一、冒泡排序1、实现逻辑所谓“冒泡排序”,可以从名称上理解:以从小到大来举例,“冒泡”实际上就是指把值更大的元素放到数列的后面(如果是从大到小排列,则反之),通过交换来实现。2、动态图演示我们先来大致地看下面的动图,感受一下冒泡排序的运行过程:3、代码实现//冒泡排序#include<iostream>...
2019-11-05 16:27:44
507
原创 经典排序—-堆排序
堆排序1、算法描述(实现逻辑):若升序的话,就将堆调成一个大堆,若降序的话,就将堆调成一个小堆.从倒数第一个非叶子节点开始往根遍历,若当前节点的值都大于左右孩子,则不用动,若是小于,就将左右孩子当中最大的节点与当前节点交换,交换后就需要进行向下调整(因为交换会影响大堆结构).重复上述步骤,直到根节点为止.2、动态图演示:3、代码实现://堆排序#include...
2019-11-05 16:26:26
127
原创 C++ 菱形继承及菱形虚拟继承
什么是菱形继承?1、菱形继承是多继承关系的一种特殊情况2、继承关系如下图: (菱形继承关系图) (基于菱形继承关系的对象模型)3、菱形继承代码:class B{...
2019-11-05 16:25:46
344
原创 经典排序—-计数排序
计数排序(鸽巢原理):1、算法描述:找到待排序列中最大最小的元素,然后以此确定临时空间的大小,在临时空间中,以待排序列组中元素的大小为下标,该元素出现的次数为该下标对应的元素,根据临时空间的统计结果,重新对元素进行回收.2、动态图描述:3、代码实现(C++):#include<iostream>#include<assert.h>using n...
2019-10-22 17:14:49
144
原创 经典排序—-归并排序
归并排序:1、算法描述:将待排序的元素序列分为两个长度相等的子序列,对每个子序列进行排序,然后将他们合并成一个序列,合并两个子序列的过程称为二路归并.2、动态图演示:3、代码实现(C++)://归并排序#include<iostream>#include<assert.h>using namespace std;//归并void Mer...
2019-10-22 17:14:23
122
原创 STL--List 常用接口模拟实现
STL--List 常用接口模拟实现: 1、list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2、list的底层是双向循环链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指 针指向其前一个元素和后一个元素。 1、常用接口介绍:1>构造:list()---------------------...
2019-10-15 09:28:05
139
原创 STL--List 常用接口简单介绍
STL--List 常用接口简单介绍:1、底层原理: 1、list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2、list的底层是双向循环链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指 针指向其前一个元素和后一个元素。 3、list与forward_list非常相似: 最主要的不同在于for...
2019-10-14 21:07:20
481
原创 经典排序—-直接选择排序
直接选择排序1、实现逻辑在未排序的序列中找到最小的元素,存放到序列的首位置,找到最大的元素存放到序列的末尾.然后抛开首位和末尾,继续重复该步骤,直到排完为止。2、动态图演示3、C++代码实现//直接选择排序#include<iostream>using namespace std;void swap(int *a, int *b){ int ret ...
2019-10-12 14:39:41
113
原创 简单模拟实现STL--vector
模拟实现STL--vector:代码分为两块1、std::vector的核心框架接口的模拟实现 lxy::vector 2、对lxy::vector核心接口的测试重点注意----迭代器失效场景总结:1、删除pos迭代器位置所指向的元素没有及时给pos赋值。比如:v.erase(pos)2、可能会引起vector底层空间改变的操作。比如:push_back(); insert...
2019-10-12 14:20:20
227
原创 STL-vector的简单了解和使用
STL-vector的简单了解:1、vector是表示可变大小数组的序列容器。2、vector的底层结构:动态类型的顺序表。3、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。4、与其它动态序列容器相...
2019-10-11 19:44:23
180
原创 经典排序—-希尔排序
希尔排序1、实现逻辑希尔排序实际上是直接插入排序的改进版本;实现过程是对整个待排序序列进行分组,然后对每一组进行直接插入排序。2、动态图演示3、代码实现#include<iostream>using namespace std;void ShellSort(int* arr, int size){ int i = 0; int key = 0;...
2019-10-11 18:22:30
99
原创 经典排序—-直接插入排序
直接插入排序:1、实现逻辑:从第一个元素开始,该元素已经排好序,继续向后取元素与排好序的元素依次进行比较,升序的话插入到比前一个大比后一个小的位置,然后重复上述步骤,直到插完元素为止.2、动态演示:3、代码实现:#include<iostream>using namespace std;//元素集合接近有序时,直接插入排序效率较高.//直接插入排序,顺...
2019-10-09 22:37:43
138
原创 经典排序—-冒泡排序
冒泡排序1、实现逻辑所谓“冒泡排序”,可以从名称上理解:以从小到大来举例,“冒泡”实际上就是指把值更大的元素放到数列的后面(如果是从大到小排列,则反之),通过交换来实现。我们先来大致地看下面的动图,感受一下冒泡排序的运行过程:2、C++代码实现//冒泡排序#include<iostream>using namespace std;void Bubble...
2019-10-08 22:54:13
85
原创 经典排序—-快排
快排1.快排的实现逻辑:先从数列中取出一个数作为基准数(通常取第一个数)。 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 再对左右区间重复第二步,直到各区间只有一个数。2、动态演示3、C++代码实现//双向快速排序#include<iostream>using namespace std;void QuickSort(...
2019-10-08 21:52:35
13677
1
转载 this指针
什么是this指针? this指针的作用是什么? this指针有哪些特性? this指针传参方式? 为什么叫this指针而不是引用呢? this指针有没有可能为空? this指针容易混淆点1) 什么是this指针?this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。举例来说:当你进入一个房子后,你可以看见桌子、椅子...
2019-10-03 16:10:32
222
转载 strlen和sizeof
关于 strlen 与 sizeof 的区别:1. strlen 是函数,sizeof 是运算符。2. strlen 测量的是字符的实际长度,以'\0' 结束(不包含'\0' )。而sizeof 测量的是字符的分配大小,如果未分配大小,则遇到'\0' 结束(包含'\0' ,也就是strlen测量的长度加1),如果已经分配内存大小,返回的就是分配的内存大小。比如:char str[...
2019-10-03 13:01:32
108
原创 Linux简介及基本指令说明
Linux简介发展史1991年10月5日,赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组 (comp.os.minix)中宣布他编制出了一种类似UNIX的小操作系统,叫Linux。新的操作系统是受到另 一个UNIX的小操作系统——Minix的启发,该系统是由一名叫Andrew S Tanenbaum的教师开发的。读 者也许猜想所发布的这个系统...
2019-10-03 12:41:17
173
原创 STL--String 类的基本接口介绍及使用
String 类:注意:在使用string类时,必须包含#include<string>头文件,以及using namespace std;1、string类对象的常见构造函数名称 功能说明 string() 构造空的string类对象,即空字符串 string(const char* s) 用C-string来构造string类对象 stri...
2019-09-24 12:37:35
266
原创 Date类
Date类的相关操作:#include<iostream>#include<windows.h>using namespace std;//时间类class Time{public: Time(int hour = 0, int minute = 0, int second = 0) { cout << "Time(int,int,...
2019-09-24 08:48:59
107
原创 C++析构函数总结
1、概念与构造函数功能相反,析构函数不是完成对象的销毁,局部对象的销毁工作是由编译器完成的,而对象在销毁的时候会自动调用析构函数,完成类的一些资源清理工作。2、特性1、析构函数名是在类名前加上~;2、无参数无返回值;3、一个类只有一个返回值。若未显示定义,系统会自动生成默认的析构函数;4、对象生命周期结束时,C++编译系统自动调用析构函数。3、两个例子1、SeqLi...
2019-09-19 23:23:48
260
原创 C++构造函数总结
1、概念1、是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初值,并且在对象的生命周期内只调用一次。2、特性构造函数的主要任务不是开辟空间创建对象,而是初始化对象。特征:1、函数名与类名相同;2、无返回值;3、对象实例化时由编译器自动调用对应的构造函数;4、构造函数可以重载。3、几种构造函数以日期类为例:...
2019-09-19 20:51:30
173
原创 根据输入的日期,计算是这一年的第几天。
问题描述:根据输入的日期,计算是这一年的第几天。。输出描述:成功:返回outDay输出计算后的第几天;失败:返回-1;示例:输入:1982 3 4输出:63#include<iostream>#include<windows.h>using namespace std;int GetDayOfMonth(int year, int ...
2019-09-19 16:59:46
1264
原创 C++ 学习路线
C++学习计划:从现在开始也算是正式开始接触C++这门高级编程语言,在大多数开发或者准开发人员的认识中,C++ 是一门非常难的编程语言,很多人知道它的强大,但因为认为“难”造成的恐惧让很多人放弃,但是我想去尝试一下。网上查了很多学习指南,总结了一下,如下图所示:看着反正挺复杂的,总之,加油吧!附上我的第一个C++代码:运行程序,做5次选择,就能知道你的生日是哪一天。/...
2019-08-31 23:21:06
680
原创 无头单向非循环链表增删查改实现
无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多的是作为其他数据结构的子结构,如哈希表、图的领接等等。下面,我们来看看无头单向非循环链表增删查改实现。SList.h(函数声明)#ifndef _SLIST_H_#define _SLIST_H_#include<stdio.h>#include<stdlib.h>#includ...
2019-07-18 16:47:45
124
原创 使用回调函数,模拟实现 qsort (采用冒泡排序法)
问题描述:对回调函数进行简单运用;模拟实现 qsort ;采用冒泡排序法。问题描述:1、定义数组,初始化要排序的数,并打印数组;2、调用 bubble 函数;3、调用 int_cmp 函数进行比较两个数大小,然后调用 _swap 函数进行交换两个数的值;4、完成排序,打印排序后数组。源代码:#include<stdio.h>#include&...
2019-07-18 15:42:24
150
原创 字符串及字符操作总结:strcpy;strcat;strstr;strchr;strcmp;memcpy;memmove。
字符串及字符操作总结:一、strcpy#include <stdio.h>#include<Windows.h>#include<assert.h>char* My_strcpy(char* str1, char* str2){ char* ret = str1; assert(str1 != NULL && str2 !=...
2019-07-18 15:32:00
177
原创 顺序表的动态存储基本接口实现
静态顺序表只适用于确定需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以,下面我们实现动态顺序表。函数声明:#ifndef _SEQLIST_H_#define _SEQLIST_H_ #include<stdio.h>#include<stdlib....
2019-07-18 15:29:46
120
原创 简易计算器 (函数指针数组的简单运用)
问题描述:编写程序,实现两个数的加、减、乘、除、取模运算。问题分析:方法一:(传统办法)1、编写菜单;2、while 循环让程序循环计算;3、switch 选择调用函数;4、打印结果。方法二:(使用函数指针数组)1、定义函数指针数组,存入要调用的函数;2、打印菜单;3、while 循环让程序循环进行;4、用户进行选择;5、判断选择是否正确,若正...
2019-06-22 13:50:06
629
原创 回调函数 (简单介绍及举例说明)
回调函数1、概念:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。2、机制:⑴定义一个回调函数;⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用...
2019-06-17 10:18:17
3396
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人