- 博客(78)
- 收藏
- 关注
原创 C++ 【 入门 】【 第一回 】
1. C++关键字(C++98)C++总计63个关键字,C语言32个关键字以下是C++98里面的关键字asm do if return try continue auto double inline short typedef for bool dynamic_cast int signed typeid public break else long sizeof typ
2022-04-10 00:40:21 2676 56
原创 操作系统课程设计 银行家算法
先对用户提出的请求进行合法性检查,即检查请求的是否不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。(4) 试分配后,执行安全性算法,检查此次分配后系统是否处于安全状态。(4) 若所有进程Finish[i] = true,表示系统处于安全状态,否则处于不安全状态。(2) 若 Requesti[j] ≤ Available[j],转向(3),否则等待。(1) 若 Requesti[j] ≤ Need[i,j],转向(2),否则出错。
2022-12-25 16:24:09 988 1
原创 mysql 客户端简单搭建
主要使用的是mysql开发包中的api接口操作流程1.初始化mysql操作句柄 MYSQL *mysql_init(MYSQL *mysql); 对传人的句柄进行初始化 若传入的句柄为NULL,则内部会动态申请空间,进行初始化,并返回句柄首地址 返回值:若失败则返回NULL2.链接mysql服务器 MYSQL *mysql real connect(MYSQL *mysql, char *host, char *u
2022-11-19 19:54:51 853
原创 Linux 信号
在信号中有两个信号比较特殊:SIGKILL -9 和 SIGSTOP-19,这两个信号不会被阻塞不会被忽略不会被自定义,也就是这两个信号的处理方式是无法被修改的。概念:信号不是信号量,信号量是进程间的一种通信方式,信号是系统中的软件中断,指一种事件通知机制,通知进程发生了某个事件,打断当前的操作,去处理这个事件。在pcb中有一个信号集合block信号阻塞集合,在集合中标记那个信号就表示要阻塞哪个信号,意味着收到这个信号暂时先不处理。SIG_SETMASK:将set集合中的信号设置为block集合中的信号。
2022-11-18 09:18:58 635
原创 C程序文件的缓冲区
1.C程序文件的缓冲区我们都知道程序编译之后给你产生一个你想要结果,比如printf(“hello”);这条语句执行完了就给你在终端屏幕上 输出hello了那这块的数据去哪块了呢?C程序在输出的时候是存在缓冲区的,当向显示器输出的时候,遇到 \n 则会立即刷新,这里我们可以用Linux下gcc来体验一下。这个是代码段 ,我直接gcc hello.c然后./a.out 执行这个程序我们发现hello world!这句先被刷新出来了之后才是那句hello就能很清晰的看到这个缓存区的存在。
2022-10-25 14:36:57 216
原创 C++ 【 类和对象 】【 第三回 】
验证环境 vs2022 x861. 赋值运算符的重载1.1 引入#include<iostream>using namespace std;class Date{public: Date(int year = 2022, int month = 5, int day = 25) { _year = year; _month = month; _day = day; } Date(const Date& d) { _year = d._yea
2022-10-09 20:18:11 579 17
原创 【大摆子 做 摆烂题】【C++】
1. 另类加法给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。1.1 思路1. 拿到这个题的首先立马反应到了数电的全加器 用一个与门和一个异或门,来做全加器。2. 进位的话用移位操作符,整体的话可以循环也可以递归来做。1.2 代码实现class UnusualAdd {public: int addAB(int A, int B) { // write code here // 这样子来理解就是数电里面的一
2022-05-29 19:20:20 439 3
原创 【大摆子 做 摆烂题】【C++】
1. 把字符串转换成整数描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0注意:①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0②字符串中可能出现 +/- 且仅可能出现在字符串首位。输入描述:输入一个字符串,包括数字字母符号,可以为空返回值描述:如果是合法的数值表达则返回该数字,否则返回01.1 思路1. 其实也就是一位位把数字取下来然后再 加之前上一个数字 * 102. 然后就是边
2022-05-24 20:43:14 392 5
原创 【大摆子 做 摆烂题】【C++】
1. 组队竞赛牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。例如:一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。如样例所示:如果牛牛把6个队员划..
2022-05-20 16:18:25 856
原创 C++ 【 类和对象 】【 第二回 】
1. 面向过程和面向对象的认知C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 1.1 面向对象和面向过程的区别1.1.1 面向过程把一个事件分析成一个个流程,比如把大象放进冰箱,就需要三步1.打开冰箱2.把大象放进去3.关上冰箱门我放一只大象这还不简单,每一步操作写一个函数不就完事了,...
2022-05-03 23:28:45 2310 49
原创 浅析C语言结构体内存对齐问题
我们之前了解过浮点数,整数在计算机的存储方式,结构体他也有他的一套存储方式。#include<iostream>using namespace std;struct test { char a; int b; char c;};int main() { cout << sizeof(test) << endl;}sizeof出来是多少呢?这还不简单 1 + 4 + 1 = 6!那结果会是这样吗?答案真的是让我们大跌眼镜,那这样我把 b
2022-04-30 16:59:54 1172 5
原创 浅谈 C/C++ 的条件编译
1.条件编译的时机我们都知道vscode其实是一个编辑器,你要在上面跑C或者C++你需要配置编译器,拿编译器是怎样吧一个文本文件变成一个可执行文件的呢?那必然是经历以下这四步预处理:宏替换,头文件的展开,去注释,条件编译 编译:将预处理后的源文件转换为汇编语言文件,只编译源文件,不编译头文件,头文件在刚刚预处理阶段已经展开。 汇编:虽然叫做汇编,但是不是转变为汇编代码,而是将刚刚的汇编语言文件转换为机器码,也就是二进制文件。 链接:将生成的二进制代码与库函数以及其他目标文件,通过链接器链接
2022-04-22 09:24:49 6896 34
原创 数据结构 严薇敏 堆 的实现及其使用方法详解
1.堆的概念将一个关键码的集合K = {k0 , k1,k2,k3……kn-1}把他所有元素按完全二叉树的存储方式放在一个一维数组中,并且满足双亲节点大于孩子节点,或者双亲节点小于孩子节点将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。1.2堆的性质堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树2.堆的实现及其接口详解2.1Heap.h#pragma once#include <stdio.h>#include &l
2022-04-20 15:46:25 1645 19
原创 Leetcode 【64】 最小路径和 C++
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12好家伙刚刚做完准备找个动态规划题做做给我来了个换汤不换药,一个类型的题还是要多总结多思考,还有就是还是用C++刷题把好家伙我记得
2022-04-19 20:15:39 223 2
原创 剑指 Offer 47 礼物的最大价值 C++
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物困难题我唯唯诺诺,简单题我重拳出击,这种DP真的感觉回到家了真舒服呀!class Sol...
2022-04-19 19:36:33 402
原创 数据结构 严薇敏 树 及 二叉树 的概念以及常用知识点
1.树的概念以及结构1.1树的概念树是一种非线性的结构它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的节点,称为根节点,根节点没有前驱节点。除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继因此,树是递归定义的树形结构中,子
2022-04-19 13:17:26 495 7
原创 Leedcode 【62】 不同路径 C语言
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。问总共有多少条不同的路径?输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下 -> 向右
2022-04-17 21:25:38 619 1
原创 Leetcode 【206】 反转链表 C语言
输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]简单题 不用画图就出来了属于是 作业好多数据结构的文章还在创作中struct ListNode* reverseList(struct ListNode* head) { struct ListNode* prev = NULL; struct ListNode* cur = head;...
2022-04-16 23:32:30 792 2
原创 Leetcode 【203】 移除链表元素 C语言
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]思路:对于这个题用暴力解法来判断很多情况,来解决。但是昨天学到了可以用带一个头结点来取消这个对于
2022-04-15 23:44:43 1143 1
原创 Linux 权限相关指令
1. 指令的本质在之前我们了解了一些基本指令,为什么在终端输入一个指令就可以实现一个功能,指令的本质是什么?内核的设计者,说操作系统是不能让用户直接访问的,设计者为了避免这个情况,就给用户提供了很多用于访问内核功能的接口(比如操作各种各样设备的接口)操作系统提供的接口不好用因为功能是过于单一的想要完成复杂功能的时候就需要组合,也就是进行编程,大佬们也就是对典型的应用功能进行了封装,比如之前的 ls 程序这个程序就是来实现浏览目录功能的,所以我们所执行的一个个指令其实就是一个个程序,你执行一跳指令,就
2022-04-14 20:51:31 1517 6
原创 Leetcode 【19】 删除链表倒数第N个节点 C语言
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]这个题我读完之后立马想到就是先遍历一遍链表统计节点个数,最后通过n的判断找到倒数第N的前驱节点进行删除,通过了,但是想到了几天前那个 876 删除中间节点那个可以使用双指针来操作,但是
2022-04-14 13:44:23 1022
原创 Leetcode 【225】 用队列实现栈 C语言
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是push to back、peek/pop from front、size.
2022-04-13 22:09:23 783 2
原创 数据结构 严薇敏 队列 的实现及其使用方法详解
目录1.队列1.1队列的概念及结构1.2队列的实现1.3接口以及实现Queue.hQueue.c申请一个队列的节点初始化队列入队列出队列查找队头元素查找队尾元素获取队列长度判断是否为空队列队列的销毁测试用例1.队列1.1队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删.
2022-04-02 15:27:10 1694 4
原创 数据结构 严薇敏 栈 的实现及其使用方法详解
1.栈1.1栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。形象一点就是吃进去吐出来,只是在一端进行操作。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。1.2栈的实现栈的话用动态顺序表实现就是比较简单的,当然也可用单链表实现,但是注意一个问题,栈是不可以被遍历的,我.
2022-04-02 00:29:28 222 23
原创 Leetcode 【876】 链表的中间节点 C语言
给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next =
2022-03-30 23:52:39 122 1
原创 Leetcode 【88】 合并两个有序数组 C语言
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例 1:输入:nums1 = [1,2,
2022-03-30 23:40:51 946
原创 Leetcode 【26】 删除有序数组的重复项 C语言
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么nums的前 k 个元素应该保存最终结果。将最终结果插入nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。int re...
2022-03-30 16:14:19 1351
原创 Leetcode 【989】数组形式的整数加法 C语言
整数的 数组形式 num是按照从左到右的顺序表示其数字的数组。例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。示例 1:输入:num = [1,2,0,0], k = 34输出:[1,2,3,4]解释:1200 + 34 = 1234示例 2:输入:num = [2,7,4], k = 181输出:[4,5,5]解释:274 + 181 = 455示例 ...
2022-03-30 16:02:43 807
原创 数据结构 严薇敏 串 详解KMP算法(KMP实现strstr函数)
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。 来自百度百科...
2022-03-21 22:53:41 1485 10
原创 数据结构 严薇敏 串 详解BF算法(BF实现strstr函数)
BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。 ...
2022-03-20 21:15:14 358 16
原创 Leedcode 【27】 移除元素 C语言 2022-03-19
27.移除元素解法一int removeElement(int* nums, int numsSize, int val){ int left=0; for(int right=0;right<numsSize;right++){ if(val != nums[right]){ nums[left]=nums[right]; left++; } } return
2022-03-19 23:03:39 996 1
原创 数据结构 严薇敏 单链表(无头结点)的实现(增 删 改 查)及其使用方法详解
1.与顺序表的对比书接上回!我们修炼了顺序表的内功,但是在很多使用场景,他都很受限制!缺点:插入删除的时候,还记得吗!我们都要搬运元素到指定位置,时间复杂度是O(N). 你的顺序表容量是提前给的,扩容的时候还要拷贝数据,开辟新空间,释放旧空间,会有很大的性能消耗。 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。若每次扩容扩少一点,则会导致频繁扩容,频繁扩容同样也会有性能消耗
2022-03-19 14:51:52 1679 12
原创 数据结构 严薇敏 顺序表的实现(增 删 改)及其使用方法详解
1.线性表概念:线性表是n个具有相同特征性的数据元素的有限序列,线性表是一种在实际中广泛使用的数据结构,每个元素都有唯一的前去和唯一的后继,前一个元素没有前驱只有后继,最后一个元素没有后继只有前驱,常见的线性表:顺序表、链表、栈、队列、字符串。数组不等于线性表,数组只是把元素存储起来了!可以增加一些增删改的方法!2.顺序表2.1概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:1...
2022-03-13 20:10:26 3092 14
原创 数据结构 时间复杂度和空间复杂度
1.时间复杂度概念:算法中的基本操作的执行次数为时间复杂度(基本语句关于问题规模N总的执行次数的一个数学函数)1.1大O的渐进表示法用常数1取代运行时间中的所有加法常数 O(1) 再修改后的运行次数函数中只保留最高阶 如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶#include<stdio.h>void Func1(int N){ int count = 0; for (int i = 0; i < N; ++i) { ..
2022-03-11 21:20:37 2502 10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人