自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

“ 七柒啊 ”的博客

算法 数据结构 c++ Linux

  • 博客(27)
  • 收藏
  • 关注

原创 算法---分治策略(快排)

分治策略之快速排序快速排序是对冒泡排序算法的一种改进,快速排序在面试过程中被提到的概率还是很大的,本文章我将介绍一下有关快速排序的一些问题。算法思想(1)指定一个定界值,通过该值会将数组分成两部分(2)将大于定界值的数据都放在右边,小于等于定界值的数据都放在左边,此时,以定界值为中心,左边全部都是小于等于定界值的数,右边全部都是大于定界值的数(3)将左边的数据拿出来,又重新找一个定界值,重复上面的操作。右边的值也是相同的操作。(4)可见,上面的操作是一个递归的过程,等左右两边的数据都进行完毕,即

2021-10-06 14:30:24 323 1

原创 算法---分治策略(二分查找)

一、二分查找二分查找也成为二分折半查找,在有序的数组中(数据量较大)查找一个数据速度是很快的,类似于二分查找的思想在生活中也是处处可见的。就比如说猜数字游戏:在1-100之间猜到对方想到的数字首先说56,对方说小了,那么接下来你说出数字的范围肯定就在57-100之间再一次78,对方说大了,那么接下来就要在57-77之间…次数范围说出的数据实际数字第一次0-1005660第二次57-1007860第三次57-776560…………

2021-10-04 08:00:00 962 1

原创 基础数据结构---八大排序

文章目录1.(简单)直接插入排序2.希尔(shell)排序3.冒泡排序4.快速排序5.选择排序6.堆排序7.归并排序8.基数排序排序 : 笔试和面试的重点.1.算法描述;2.实现;3.效率分析(时间复杂度,空间复杂度,稳定性)难点 : 排序算法太多稳定性 : 针对关键字相同的数据(相同的数字),排序前如果A在A’的前面,排序后还能保证A在A’的前面则算法稳定,否则不稳定;有没有跳跃的交换数据,有则不稳定,没有则稳定第一个排序:(简单)直接插入排序.特点 数据越有序越快,完全有序则为O(n)第二个排

2021-10-03 08:00:00 325 2

原创 基础数据结构---队列

文章目录queue头文件queue.cpp文件queue头文件#pragma once//队列:先进后出的一种线性结构,入队(插入)的一端称为队尾,出队(删除)的一端称为队头//队列的存储方式有两种,一种为顺序结构(顺序队列),另一种为链式结构(链式队列)//顺序队列一定会设计成环形队列,原因是线性队列的入队为O(1),出队为O(n)//环形队列的入队为O(1),出队为O(1)//满:尾指针再走一步就到头指针;浪费一个空间不实用,主要是为了区分空和满的情况//顺序队列主要理解两点设计:1

2021-10-02 08:00:00 104 4

原创 基础数据结构---栈

文章目录stack头文件stack.cpp文件stack头文件#pragma once//栈:后进先出,后来反而需要先服务 (访问受限的线性表)//栈分为顺序栈,链式栈//本文件为不定长顺序栈,能自动扩容//栈只能在一端进行插入和删除,插入和删除的这一端称为栈顶,另一端称为栈底//顺序栈的栈顶在尾部,因为入栈和出栈的时间复杂度都为O(1)#define INIT_SIZE 10typedef struct Stack{ int* base;//指向动态内存 int stac

2021-10-01 08:00:00 114 2

原创 基础数据结构---顺序表(静态链表实现)

文章目录slist头文件slist.cpp文件slist头文件#pragma once//静态链表,利用顺序表模拟链表//静态链表保护两条链表,一条为有效数据链表,另一条为空闲节点链表//有效数据链表为带头结点的循环链表,且头结点在0下标//空闲节点链表为带头结点的循环链表,且头结点在1下标//注意,添加一条空闲节点链表的目的是让插入数据时找空闲节点的速度变为O(1)//静态链表的优点:和顺序表对比,插入和删除数据时不需要移动数据O(1)//静态链表的优点:和链表对比,不需要频繁的创建和删

2021-09-30 19:00:00 199

原创 基础数据结构---顺序表(链式结构实现)

文章目录1.带头节点的单链表list头文件list.cpp文件2.带头结点的双向链表dlist头文件dlist.cpp文件3.带头结点的循环链表clist头文件clist.cpp文件1.带头节点的单链表list头文件#pragma once//带头节点的单链表//头节点:不用于存储数据,只是起标记作用//单链表:尾节点的next为空typedef struct Node{ int data;//数据域 struct Node* next;//后继指针}Node, * List; /

2021-09-30 12:00:00 80

原创 基础数据结构---顺序表(顺序结构实现)

文章目录固定长度的顺序表sqlist头文件sqlist .cpp文件固定不长度的顺序表dsqlist头文件dsqlist .cpp文件固定长度的顺序表sqlist头文件#pragma once //预防头文件被重复引用//顺序表,固定长度(非常简单,不实用)typedef struct SQList{ int elem[10];//存放数据,固定长度为10 int length;//有效数据的个数}SQList, * PSQList;//typedef struct S

2021-09-29 19:58:31 81

原创 Linux 知识点大整理(1)

至今为止,我已经分部完成Linux网络编程之前的内容,在这里,我将要对我之间所写的内容进行整理,希望对你有所帮助。每一个标题都做了简单的介绍,具体请点击标题下方的链接。文章目录Linux简介Linux常用基础命令(1)Linux常用基础命令(2)编译链接过程Linux 系统上 C 程序的编译与调试(make、gdb)linux中静态库与共享库的生成与使用计算机基础概论Linux主函数 && fork操作文件的系统调用 && 进程替换execLinux 信号的使用Linux

2021-07-30 21:26:11 166

原创 Linux线程的实现——条件变量、读写锁

文章目录前言一、条件变量二、读写锁前言条件变量提供了一种线程间的通知机制:当某个共享数据达到某个值的时候,唤醒等待这个共享数据的线程。这个可以想象成把线程加入到一个链表中,等待被唤醒,唤醒之后执行相应的操作主要函数:1. #include <pthread.h>2.3. int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *attr);//创建条件变量4.5. int pthread_cond_wait

2021-07-30 20:11:43 277

原创 Linux 中线程的实现

文章目录前言一、Linux系统线程的实现方式二、线程安全三、进程创建1.创建进程上限2.线程+fork()3.线程+互斥锁+fork4.三个线程依次输出ABC前言用户级:创建开销小,由线程库直接管理。无法使用多处理器资源内核级:创建开销大,由内核直接管理。可以使用多处理器的资源一、Linux系统线程的实现方式Linux实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。Linux把所有的线程都当作进程来实现。内核并没有准备特别的调度算法或是定义特别的数据结构来表征线程。相反,线程.

2021-07-30 16:22:21 1165 3

原创 进程间通信——消息队列

文章目录一、消息队列原理二、消息队列函数介绍三、代码示例一、消息队列原理上图为消息队列原理示意图我们创建一个消息队列之后,可以向消息队列中添加消息,也可以获取消息,其存放数据的地方在内存中。在添加消息的时候,可以指定消息的类型(前面的1 、2 就是消息的类型)来决定被谁接收,在接收消息的时候,也可以根据其类型接收,例如:要接收2号类型的消息,就不会接收到1号类型的消息。和管道相比,管道是一个字节流式的(写入什么就读取什么),而消息队列是一个结构体,类型更加丰富,我们所需要的东西都可以自己去定义。

2021-07-30 15:41:55 472

原创 进程间通信——共享内存

文章目录一、共享内存二、相关函数用法介绍三、共享内存的使用3.1 示例代码 13.2 示例代码 2一、共享内存共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物理内存上申请一块空间,多个进程可以将其映射到自己的虚拟地址空间中。所有进程都可以访问共享内存中的地址,就好像它们是由 malloc 分配的一样。如果某个进程向共享内存写入了数据,所做的改动将立刻被可以访问同一段共享内存的任何其他进程看到。由于它并未提供同步机制,所以我们通常需要用其他的机制来同步对共享内存的访问。二、相

2021-07-29 16:51:21 303

原创 进程间通信——信号量

文章目录前言一、信号量过程总结前言信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目,获取资源时,需要对信号量的值进行原子减一,该操作被称为 P 操作。当信号量值为 0 时,代表没有资源可用,P 操作会阻塞。释放资源时,需要对信号量的值进行原子加一,该操作被称为 V 操作。信号量主要用来同步进程。信号量的值如果只取 0,1,将其称为二值信号量。如果信号量的值大于 1,则称之为计数信号量。临界资源:同一时刻,只允许被一个进程或线程访问的资源临界区:访问临界资源的代码段一、信号量

2021-07-29 16:23:58 2078

原创 进程间通信——管道

文章目录前言一、管道文件1.1管道文件的创建二、有名管道的使用三、无名管道的使用总结前言进程间通讯就是在两个进程之间传递数据进程间通讯机制(ipc):管道,信号量,消息队列,共享内存,套接字一、管道文件(写入管道的数据存放在内存中。)1.1管道文件的创建管道是一个半双工的通信方式。创建指令:mkfifo fifo(创建一个名为fifo的管道文件)管道的使用需要在两个进程,一个往管道写入数据,一个从管道读取数据;1.写端关闭,读端int n = ead返回值为,写入数据的进程停止运行,读

2021-07-29 11:15:21 483

原创 Linux 自己实现一个简单的bash

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码

2021-07-29 11:02:50 456

原创 Linux 信号的使用

文章目录一、信号的概念二、修改信号的方式 —— signal()三、发送信号 – kill()提示:以下是本篇文章正文内容,下面案例可供参考一、信号的概念信号 是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。与信号有关的系统调用在“signal.h”头文件中有声明常见信号的值,及对应的功能说明:信号的值在系统源码中的定义如下: #define SIGHUP 1 #define SIGINT 2 //键盘按下 Ctrl+c 时,会产生该信号 #define SIGQUIT

2021-07-27 21:15:47 149

原创 操作文件的系统调用 && 进程替换exec

文章目录一、系统调用文件操作有关的系统调用二、系统调用与库函数的区别三、进程替换 exec(1)exec 系统函数介绍(2)exec 系统函数使用(3) fork 和 exec 联合使用创建一个全新的进程提示:以下是本篇文章正文内容,下面案例可供参考一、系统调用系统调用:用很少的函数对文件和设备进行访问和控制,这些函数被成为系统调用,由UNIX(和Linux)直接提供它们也是通向操作系用本身的接口。系统调用是在库与操作系统之间的方法,一个程序通过调用库方法来调用系统调用,在操作系统上实现想要实现

2021-07-25 17:37:14 250

原创 Linux主函数 && fork

文章目录一、printf函数输出问题二、主函数参数介绍三、进程复制 fork3.1 fork 方法3.2 写时拷贝3.3 fork练习3.4 僵死进程及处理方法一、printf函数输出问题printf 函数并不会直接将数据输出到屏幕,而是先放到缓冲区中,只有一下三种情况满足,才会输出到屏幕。1) 缓冲区满2) 强制刷新缓冲区 fflush3) 程序结束时示例1: #include <stdio.h> #include <stdlib.h> #include &lt

2021-07-24 23:47:34 270

原创 计算机基础概论

文章目录一、计算机基本组成1.1 计算机组成五大部件1.2 系统总线1.3 指令二、进程概论三、内存管理3.1 简单分页 逻辑页 物理页 页表3.2 虚拟内存四、操作系统发展史提示:以下是本篇文章正文内容,下面案例可供参考一、计算机基本组成1.1 计算机组成五大部件(1) 运算器 :也叫算数逻辑单元,完成对数据的各种常规运算,如加减乘除,也包括逻辑运算,移位,比较等。(2) 控制器 :它是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及

2021-07-24 20:48:11 235 3

原创 linux中静态库与共享库的生成与使用

linux中静态库与共享库的生成与使用1.什么是库文件库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储 在/usr/include 下或其子目录下。库文件分为两种:一种是静态库,命令规则是libxxx.a;一种是共享库,命令规则是libxxx.so。例如:libfoo.a libc.so.6 libthread.so2.库文件的生成与

2021-07-24 10:39:41 370

原创 Linux 系统上 C 程序的编译与调试(make、gdb)

文章目录一、Linux 系统上 C 程序的编译二、make && makefile文件三、gdb调试3.1 Debug 版本和 Release 版本3.2 单进程、单线程基础调试命令Linux系统上 C 程序的编译与调试需要用到gcc,这里就不详细介绍gcc的安装,程序编译链接过程在下面的链接中。详情请点击↓程序编译链接过程提示:以下是本篇文章正文内容,下面案例可供参考一、Linux 系统上 C 程序的编译C程序的编译需要四部:预编译、编译、汇编、链接其分布命令如下:$ g

2021-07-24 10:34:32 560 2

原创 程序编译链接过程

文章目录前言一、预编译阶段二、编译阶段三、汇编阶段四、链接阶段总结前言#include<stdio.h>int main(){ printf("hello word!\n"); return 0;}这个经典的“hello word”C语言程序是每个码农必须经历的代码,想要执行时,只需要一条“gcc -o main main.c”指令,就生成了一个可执行文件。众所周知,我们用c/c++等高级语言代码所写的.c/.cpp文件是不能够直接执行的,我们需要对该文件进行编译链接,生

2021-07-23 18:00:45 1367 4

原创 Linux常用命令(2)

文章目录一、文件查看命令1.1 cat1.1.1 查看文件内容1.1.2 合并文件1.1.3 往文件中写入数据1.2 more1.3 less1.4 head1.5 tail二、文件编辑命令2.1 vim 安装2.1.1vim下载安装2.1.2 vim 配置2.2 三种模式介绍2.3 模式切换2.4 vi/vim常用命令2.5 末行模式下的操作三、文件压缩与解压命令3.1 tar3.2 gzip四、进程管理命令4.1 ps4.2 pstree4.3 kill4.4 pkill4.5 & 后台

2021-07-22 23:37:22 108

原创 Linux常用命令(1)

文章目录一、Linux系统文件与文件权限1.文件类型2.文件权限3.修改文件权限 chmod3.1文字设定法3.2数字设定法二、Linux常见命令1.基础命令1.1 pwd1.2 cd1.3 ls1.4 man1.5 touch1.6 mkdir1.7 rmdir1.8 cp1.9 mv1.10 rm1.11 find1.12 grep1.13 管道 |1.14 wc1.15 su1.16 关机与重启1.17 runleve总结一、Linux系统文件与文件权限1.文件类型Linux 下所有的东西

2021-07-22 22:22:39 119 2

原创 Linux简介

文章目录前言一、Linux1.Linux与windows的区别2.Linux常见的发行版本二、Linux系统目录介绍1.目录结构2.常见目录说明3.绝对路径与相对路径4.家目录前言Linux 就是一组软件,而软件分为操作系统软件和应用软件,当然 Linux 属于操作系统软件。计算机是由一堆硬件组成的,为了有效的控制这些硬件资源,于是乎就有了操作系统的产生,操作系统除了有效的控制这些硬件资源的分配,并提供计算机运作所需要的功能(如网络功能)之外,为了要提供程序设计师更容易开发软件的环境,所以操作

2021-07-22 20:41:26 1310 1

原创 作用域(可见性)和生存期

作用域(可见性)和生存期**一、作用域(可见性):**指标识符能够被使用的范围。**(1)函数域:**函数中定义的标识符,包括形参以及函数中定义的局部变量。作用域为此函数内部。**(2)全局作用域:**也称文件作用域 ,定义在函数之外的全局变量和函数。作用域为从定义到整个文件结束。```c在这里插入代码片...

2021-01-07 21:46:55 507

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除