- 博客(16)
- 收藏
- 关注
原创 Linux进程控制详解
目录一、进程创建 一、进程创建 1、fork函数:可以在代码中创建一个子进程。 pid_t fork(void) a. 没有参数 b. pid_t:·本质是整形 c. 原理:fork创建的子进程的PCB拷贝父进程的PCB d. 返回值: 创建失败:-1 创建成功:>0(子进程的PID号):返回给父进程 =0:返回给子进程 注意: 子进程是拷贝父进程的PCB的,子进程的大部分数据来源于父进程,例如:内存指针(数据段、代码段) 父进程创建子进程成功之后,父子进程是两个独立的进程(进程的独立性),父子进
2021-08-10 21:40:03
348
原创 进程的基本概念
进程与程序: 1、程序: 经过源代码编译出来的文件,这个文件是静态的。 2、进程: 程序运行时的实例,是动态的;从内核角度看,进程是操作系统分配资源的实体
2021-07-29 11:31:24
341
原创 浅拷贝和深拷贝详解
浅拷贝所带来的问题: 首先看下面这段代码可以正常运行。 #include<iostream> #include<string.h> #include<stdlib.h> using namespace std; class String { public: String(const char *str = "") { m_data = (char*)malloc(strlen(str) + 1); strcpy(m_data, str); } char*
2021-04-12 21:09:04
361
原创 C++类的构造函数、析构函数与拷贝构造函数
先简单创建一个类,下面的一些讲解以及操作都会在这个类中实现: #include<iostream> using namespace std; class test { public: private: int m_data; }; int main() { test t; } 文章目录构造函数特点:析构函数 构造函数 对于test类,可以通过公有的方法给对象设置内容,但是如果每次创建对象都调用该方法设置信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢?我们可以利用构造函
2021-04-11 15:18:54
528
原创 常见排序算法详解(上)
文章目录插入排序基本思想:直接插入排序的特性总结:代码:希尔排序基本思想:希尔排序特性总结:代码:选择排序基本思想:直接选择排序特性总结:代码:冒泡排序原理:特性总结:堆排简介:堆排特性总结:代码: 插入排序 基本思想: 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此
2021-03-29 18:01:00
320
1
原创 二叉树的基本操作
目录递归实现二叉树的前序、中序、后序遍历遍历法计算节点个数分治法计算节点数计算叶子节点数计算第K层的节点数(root为第一层)找到为x的节点 typedef int BTDataType; typedef struct BinaryTreeNode { BTDataType data; struct BinaryTreeNode* left; struct BinaryTreeNode* right; }BT; 递归实现二叉树的前序、中序、后序遍历 //前序遍历 void PrevO
2021-03-21 14:04:47
2311
5
原创 带头节点的双向循环链表
//DList.h #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> typedef int LTdataType; typedef struct ListNode { struct ListNode* prev; struct ListNode* next; LTdataType data; }ListNode; ListNode* Init(); void Disto
2021-02-23 15:57:13
207
原创 [leetcode] 138.复制带随机指针的链表(C语言)
题目描述: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示: val:一个表示 Node.val 的整数。 random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。 示例 1: 输入:head = [[7,null],[13,0],[11,4],[10,
2021-02-07 22:19:41
2859
6
原创 顺序表的基本操作代码实现
顺序表:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。即线性表采用顺序存储的方式存储就称之为顺序表。 下面直接上代码: //SeqList.h #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> typedef int SLdatatype; typedef struct SeqList { S
2021-02-05 19:43:26
2990
3
原创 单链表的逆序
对下面单链表进行逆序: 首先定义n1,n2,n3三个指针,使n1=NULL,n2=head,n3=head->next 然后将n2指向n1 再令n1等于n2,n2等于n3 在n3不等于NULL的情况下,令n3=n3->next 在n2不等于NULL的情况下,重复上面步骤,直到将单链表逆置。 下面给出具体算法代码: struct ListNode* reverseList(struct ListNode* head){ if(head==NULL||head->next==N
2021-01-31 22:11:14
299
原创 LeetCode——旋转数组
一、题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2: 输入:nums = [-1,-100,3,99], k = 2 输出:[3,99,-1,-100] 解释: 向右旋转 1 步: [
2021-01-29 11:09:00
237
原创 二分法原理及代码实现
如果这篇文章对你有所帮助或者给了你灵感,欢迎给我点个小红心,如果没有,也可以点个赞支持一下,谢谢大家!!! 二分法 基本思想: 假设数据是按升序排序的,对于给定值key,从序列的中间位置 k 开始比较, 如果当前位置arr[k]值等于key,则查找成功; 若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1]; 若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high]。 时间复杂度: 1.最坏情况查找最后一个元素(或者第一个元素)Mast
2020-12-04 23:19:34
1795
5
原创 C语言传值调用与传址调用的区别
传值调用: 传值调用是指当一个函数被调用时,C++根据实参和形参的对应关系将实参的值一一复制给形参,即实参的值单向传递给形参。但函数本身并不对实参进行任何操作,即使形参的值在函数中改变,实参的值也不会受到影响。 传址调用: 向函数传递参数的传址调用方法,是指把引用的地址复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。 下面给出传值调用的代码: #include<stdio.h> void swap(int x,int y)//形参 {
2020-12-03 21:03:03
3244
原创 打印100~200之间的素数
百度中对素数的定义: 质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。 下面给出代码: #include<stdio.h> int main() { int i, j; for (i = 100; i <= 200; i++){ for (j =2; j<=i; j++){ if (i%j == 0) { break; } } if (i == j){
2020-12-02 11:06:59
208
原创 求两个数的最大公约数——辗转相除法
辗转相除法: 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求两个正整数之最大公约数的算法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。 下面给出具体代码: #include<stdio.h> int main() { int a, b, c; printf("请输入两个数:\n"); scan
2020-12-01 23:02:12
5294
3
原创 C语言位运算符(&、|、^)
&、 | 和 ^ 的真值表如下所示: 如果 A = 3,且 B = 5,现在以二进制格式表示,它们如下所示: A = 0000 0011 B = 0000 0101 则 A&B = 0000 0001 (按位与 & 只有1跟1与才是1,其他都是0) A|B = 0000 0111 (按位或 | 1跟其他数或都是1) A^B = 0000 0110 (按位异或 ^ 相异为1) 下图为运行后的结果显示: ...
2020-11-21 17:32:33
4423
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅