笔记
有头发的小小猿
这个作者很懒,什么都没留下…
展开
-
Makefile文件编写(从0开始)
Makefile文件编写,依赖.so动态库,多文件编写原创 2023-05-25 19:39:44 · 658 阅读 · 0 评论 -
C/C++获取时间戳
时间戳原创 2023-04-25 15:28:55 · 7272 阅读 · 0 评论 -
归并排序递归、非递归
归并排序就是将原本有序的几个序列合并成一个完整有序序列,有二路归并(两个合成一个)还有多路归并。用这种思路来对一个序列进行排序则需要将这一个序列分为多个子序列进行重新合并。从子序列只有一个数直到最后二路归并完整个序列。二路归并形态上像一个倒立的二叉树,二叉树的第h层最多有2的h-1次方个结点,若树高为h,则应满足n<=2的h-1次方。每一趟归并的时间复杂度为O(n),算法的时间复杂度为O(nlog2(n))。由于需要开辟临时数组,所以空间复杂度为O(n)。算法稳定性:稳定。归并排序的递归原创 2021-10-09 21:34:20 · 199 阅读 · 0 评论 -
排序算法——快速排序
快速排序算法就是不断的取基准值,然后根据基准值将序列分成大于基准值的和小于基准值的两部分。划分的方法有两种:第一种是双向划分,从两端向中间合拢具体代码:int Partition(vector<int>& arr, int low, int high){ int tmp = arr[low]; while (low < high) { while (low < high&&tmp<=arr[high]) { high--;原创 2021-10-09 17:14:55 · 501 阅读 · 0 评论 -
排序算法——希尔排序
先将序列分成若干个子表,然后对各个子表进行插入排序。子表中的元素为d个,直到d为1停止分割。类似这样产生子表,使各个子表有序。空间复杂度为O(1);希尔排序的时间复杂度最坏是O(n²),n在某个范围内可达O(n^1.3);算法稳定性:不稳定代码实现:void ShellSort(vector<int> &arr){ for (int d = arr.size() / 2; d > 1; d /= 2) { for (int i = d; i <arr原创 2021-10-09 16:05:32 · 77 阅读 · 0 评论 -
const char *、char const*、char *const三者区别
最近在写代码时经常碰到这几个定义,总是搞不清楚,看了很多大佬的解析,其实还是很好区分的。首先有指针s表示的是内存地址,有了指针不仅可以对指向的内容进行操作,即 s,还可以对存储地址进行操作&s。一、const char sconst char* s表示的是指向常量的指针,就是不可以利用该指针对其指向的数据进行修改,即*s不能变(但是其他指针可以对这个数据进行修改),但是该指针的指向可以修改,即s可以变。二、char const *schar const *s与第一种const char原创 2021-07-01 09:56:46 · 3052 阅读 · 0 评论 -
Linux——socket网络编程
网络IP地址类型:IPV4,IPV6在Linux中使用ifconfig查看自己的IP地址mac地址和IP地址都能分别表示特定的一台主机,mac是设备的固定地址,IP地址是可变的。管理IP地址和mac 地址的是协议,有arp、rarp协议等端口:进程的编号,用来区分同一台主机运行的不同进程网络分层模型:osi模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层TCP/IP模型:应用层、传输层、网络层、数据链路层套接字(socket):可以实现不同主机之间的进程通信通用socket原创 2021-05-18 17:20:16 · 139 阅读 · 0 评论 -
Linux——条件变量
条件变量是线程同步数据的值,当到达某个值的时候,唤醒某个线程。pthread_cond_init()初始化pthread_cond_broadcast()唤醒所有线程pthread_cond_signal()唤醒某个线程需要结合互斥锁一起使用,保证同一时间只有一个唤醒操作#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <原创 2021-05-12 23:36:02 · 193 阅读 · 0 评论 -
Linux基础——管道
进程间通信(IPC):管道、信号量、共享内存、消息队列、套接字管道是在内存中实现,不在磁盘中,只作为一个通道,大小为0通信分为单工、半双工、全双工单工:a—>b不可逆,一次成型半双工:a->b或b->a可逆,可以调整方向,但需要重新打开,管道为半双工全双工:a<–>b 直接表现为可逆管道的读写也是用 open write read closeopen 必须打开至少两个进程(读写) 否则就会阻塞住也可分为有名管道和无名管道无名管道:父子进程之间进行原创 2021-04-28 23:16:03 · 196 阅读 · 0 评论 -
Linux基础——bash
bash命令解释器内核<----->命令解释器(shell,bash,sh,tcsh)<----->用户两者之间通过命令解释器进行交互linux中输入的执行命令来源都是bashbash->bash(fork()产生的子进程) 再通过exec()替换这个进程,变成用户需要执行的进程依据这个创建mybash#include<stdio.h>#include<stdlib.h>...原创 2021-04-28 16:42:45 · 170 阅读 · 0 评论 -
Linux基础——信号
signal信号signal(信号名,对信号的处理)可以接收信号signal(SIGINT,sig_fun);//自定义一个函数sig_fun,约定当遇到SIGINT信号时执行此函数signal(SIGINT,SIG_IGN);//遇到该信号忽略signal(SIGINT,SIG_DFL);//遇到该信号默认执行该信号的操作#include<stdio.h>#include<stdlib.h>#include<signal.h>#inclu...原创 2021-04-27 20:41:03 · 104 阅读 · 0 评论 -
linux基础——fork()和文件操作
Linux代码中主函数的参数//参数个数 argc(至少有一个)//参数内容 argv(文件名就是其中一个)//环境变量 envpint main(int argc,char *argv[],char *envp[]){ printf("argc=%d\n",argc);//打印函数个数 int i = 0; for(;i<argc;i++){ printf("argv[%d]=%s\n",i,argv[i]);//打印函数内容 } for(i = 0;envp[i] !=原创 2021-04-26 17:38:20 · 408 阅读 · 0 评论 -
linux命令——显示进程、打包解压、makefile文件
欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图片原创 2021-04-24 20:45:04 · 264 阅读 · 0 评论 -
算法——朴素算法和KMP算法
串的匹配长的为主串,短的为模式串。模式串去遍历主串,找到相对应的匹配位置。#include<stdio.h>#include<stdlib.h>#include<string.h>//构造串结构typedef struct String{ char* pstr; int total;//总大小 int cur;//有效元素大小}String,*PString;void initString(PString ps){ if(ps !=原创 2021-03-28 21:42:55 · 110 阅读 · 0 评论 -
数据结构——串
串1.定长的串#define MAXSIZE = 10struct String{char str=[MAXSIZE];//储存串字符的数组int len;//串字符的长度};2.变长的串struct String{char* pstr;//开辟内存int totalsize;//串当前最大长度int cursize;//串当前有效长度};创建文件“main.cpp”#include<stdio.h>#include"String.h"int main()原创 2020-09-26 23:15:48 · 93 阅读 · 0 评论 -
数据结构—链队
链队以单链表的形式 FIFO 特征代码部分结点struct Node{ ElemTtpe data;struct Node* next;};头指针和尾指针struct Queue{struct Node* phead;struct Node* ptail;};原创 2020-09-12 18:11:54 · 129 阅读 · 0 评论 -
Linux——多线程线程安全
#include<stdio.h>#include<string.h>#include<unistd.h>#include<assert.h>#include<stdlib.h>void * fun(void * arg){char buff [] = “1 2 3 4 5 7 8 9 10”;char * ptr = NULL;char * s = strock_r(buff," ",&ptr);printf(“f原创 2020-08-18 16:05:11 · 107 阅读 · 0 评论 -
Linux——线程中信号量和互斥量的运用
用于控制进程进行顺序信号量 互斥量条件变量 读写锁对单个进程的控制创建“main.c”文件#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#inlcude<pthread.h>#include<semaphore.h>int g = 1;sem_t se原创 2020-07-26 23:53:50 · 191 阅读 · 0 评论 -
Linux——线程
线程:进程内部的一条执行路径进程:一个正在运行的程序,管理资源分配的基本单位#include<stdio.h>#incldue<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include<pthread.h>void* fun(void* arg){int i = 0;for(;i<10;i++){printf(“fun原创 2020-07-24 18:09:55 · 82 阅读 · 0 评论 -
Linux入门
![Linux入门进入终端界面操作基础原创 2020-03-06 01:08:08 · 82 阅读 · 0 评论 -
Linux入门——gdb调试、库
linux入门进入终端界面man 帮助手册man + 某一字符目录文件即文件夹ls 浏览ls + 文件名或目录文件名touch 创建新文件mkdir 创建新目录文件rm 删除文件rm _r 可删除文件或目录文件rmdir 删除目录文件cp 拷贝mv 移动mv 文件 目录文件 (若无此目录文件则创建)vi不能进入目录文件...原创 2020-05-12 19:52:03 · 175 阅读 · 0 评论