自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 数据结构-算法概念与程序设计

1、时候统计法,很多计算机内部都具有计时功能,不同的而算法程序可以通过一组或者多组相同的统计数据以分辨优劣,但是这中办法有两中弊端:1、必须先运行依赖算法编制的程序。2、所得的时间的统计量依赖于计算机的硬件软件等环境因素,容易掩盖算法本身的优劣。(2)确定性:算法中的每一条指令必须有确切的含义,在任何条件下,算法只有唯一的一条执行路径,对于相同的输入只能得到相同的输出。程序主要是为了人的阅读与交流,其次才是机器执行,可读性好有助于人对于算法的理解,晦涩难懂的程序容易隐藏错误,难以调试和修改。

2023-12-25 22:07:59 456

原创 面试-数组中的重复数字

数组存放1-n,在数组中存在一个重复的数,找出这个重复的数。

2023-12-25 20:56:17 333

原创 面试-判断数组序列是否具有单调性

bool类型的两个函数,如果单调递增返回值为真,单调递减返回值也为真,两者都不满足返回值为假。数组序列从大到小或者从小到大。单调递增或者单调递减。

2023-12-20 20:37:42 386

原创 面试-旋转数组的三种方法

将原来的数组分割成两个部分,直接向后移的,和往前移的,先把旋转到前面的写入到新申请的空间,后面补上向后移的,最后将新空间的内容依次赋值给原来的数组,然后释放申请的空间,并将指针置为空。题目:给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。先将数组全部逆置,然后把前k个元素和剩下的元素分别逆置。再编写函数调用K次右移一位的函数。先编写右移一位的函数。

2023-12-20 17:59:11 405

原创 面试题-合并两个有序数组

在两个数组都没有写进去的情况下,进行比较,小的先写,写完进行下一个的比较,直到其中一个数组完全写完,然后退出比较,将没有写完的数组再写道入新数组中。从后向前依次放去,如果数组2先放完,则排序成功,如果数组一先放完,将数组二剩下的依次放入到数组一剩下的位置中。顺序表的结构存放在栈区,存放的内容在堆区。3、将两个数组写进去新申请的空间中。2、申请新空间为两个数组大小之和。

2023-12-20 17:06:49 319

原创 数据结构-顺序表的大小

cpu访问内存(通过地址)8个二进制位称为一个存储单元(一个字节)

2023-12-18 18:04:43 517

原创 数据结构-typedef关键字讲解

凡是合法的变量声明都可以使用typedef转换成类型声明。给结构体起别名可以在使用时不用写struct。typedef就是给已有的类型名起一个别名。

2023-12-15 16:18:46 50

原创 数据结构-线性表的详解

线性表中的数据元素可以是各种各样的,但是同一个线性表中的数据元素必须具有相同的特性,属于同一种数据对象,相邻数据元素之间存在序偶关系。线性表的顺序指的是,用一组地址连续的存储单元,一次存储线性表的数据结构。(4)除了最后一个以外,集合中的每一个数据元素均只有一个后继。(3)除了第一个以外,集合中的每一个数据元素均只有一个前驱。(2)存在唯一的一个被称为最后一个的数据元素。(1)存在唯一的一个被称为第一个的数据元素。一个线性表是n个数据元素的有限序列。线性表的数据元素必须是连续的。

2023-12-15 16:00:00 37

原创 数据结构-数据结构导论

数据元素:是数据的基本组成单位,在计算机中通常作为一个整体进行考虑和处理,一个数据元素可以被分成若干个数据项,数据项是数据元素不可分割的最小单位。数据元素之间的关系在计算机中有两种不同的表示方式:顺序映像和非顺序映像,由此得到两种不同的存储结构:顺序存储结构和链式存储结构。数据的逻辑关系和物理关系是密切相关的两个方面,任何一个算法的设计取决于选定的逻辑结构,而算法的实现依赖于物理结构。数据元素在计算机中的存储称为存储结构,又称为数据的物理结构,包括数据元素的表示和关系的表示。数据元素之间存在一对多的关系。

2023-12-15 15:30:11 154

原创 http协议和HTTP编程流程

服务器与浏览器建立连接之后,如果两次以上的请求复用同一个TCP链接,就称为长连接,如果浏览器发送一次请求报文,服务器一次应答就断开,下次交互再重新进行三次握手连接,就称为短链接,长连接更好,减少网络中的同步报文,也使服务器的响应速度变快。浏览器和web服务器在应用层通信使用的是http协议,HTTP协议在传输层使用的是TCP协议,浏览器和web服务区三次握手建立连接之后,才能发送HTTP请求报文,那么服务器收到请求报文之后,向浏览器回复http应答报文。(超文本传输协议)(80)[应用层协议]

2023-08-23 10:41:15 1437

原创 TCP特点UDP编程

对于udp编程,因为是无连接的,所以可以多个客户端发送,客户端关闭,服务器端不回收到任何数据,服务器端关闭后,对于客户端无影响。解决办法:让接收的时候能区分出来,用不同的报文、在报文前面描述数据有多大、不连续send。只有在握手和挥手的时候回引起TCP协议的变化,稳定收发连接的时候状态时不会发生改变的。3、接收recvfrom()//需要指定对方的IP和端口。2、发送sendto()//需要指定对方的IP和端口。多次发送的数据被一次性收到了,误以为是一次性收到的。2、指定IP和端口bind()

2023-08-21 15:16:03 1944

原创 TCP编程流程(补充)

客户端发送的数据和服务器返回的数据,数量对不上是正确的,因为发送数据是从发送缓冲区进行发送,接收是从接收缓冲区进行接收,所以真正接收到的数据和发送的数据可能不相同,真正发送的,和接收到的数据也可能不相同。netstat _natp:查看缓冲区还有多少个数据,查看是送的缓冲缓冲区还没有发送,还是接收缓冲取还没有被接收。如果只有一个线程,南那么只能接收一个客户端,被堵塞住了,如果先要链接多个客户端,就需要启用多个线程。执行listen会创建一个监听队列。

2023-08-20 15:10:53 484

原创 TCP编程流程

主机字节序列分为大端字节序和小端字节序大端字节序是指一个整数的高位字节存储在内存的低地址处,低位字节序列存储在内存的高地址处。小端字节序是指整数的高位字节存储在高地址处,低位字节序列存储在内存的低地址处。网路字节序列:大端字节序列,转换为大端:htons()

2023-08-19 19:38:59 701

原创 网络编程基础(1)

为应用层提供可靠的面向连接的和基于流的服务,TCP协议使用超时重传,确认应答等方式来确保数据包被正确的发送至目的端,TCP协议是可靠的,使用TCP协议通讯的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构,比如连接状态、读写缓冲区等,等通讯结束后,双方必须关闭连接以释放这些内核数据,TCP服务是基于流的,基于流的数据没有长度限制,他远远不断的从通讯的一端流向另外一端,发送端可以逐个字节的向数据流中写入数据,接收端也可以逐个字节的将他们读出。四个字节,每个字节8位,共32位,用十进制表示。

2023-08-18 14:07:12 1772

原创 linux17 线程安全 线程同步

多线程程序无论调度顺序如何,都能保证程序 的正确性,就说该程序处于线程安全的状态1)、同步2)、线程安全函数//有的函数不适合多线程使用,是函数自身的原因。

2023-08-17 14:59:38 213

原创 Linux16(2)生产者消费者

【代码】Linux16(2)生产者消费者。

2023-08-16 18:02:59 28

原创 Linux16(1) 线程同步

用户级线程:模拟出来多条路径,在内核眼里依旧是一条路径,他的出现不需要操作系统参与,可以创建特别多的线程,开销小但是无法使用多个处理器(只能并发)当有线程持有读模式锁时,其他线程也可以继续获取读模式锁,但不能获取写模式锁。在Linux系统上,没有线程的概念,每一个线程都是当作进程来实现的,是一个和其他进程共享某些资源的进程,都拥有属于自己的内存控制块。组合:可以利用多处理器的资源,在用户空间可以创建更多线程,对于后期线程的创建来说,开销小。加锁:pthread_mutex_lock(&mutex);

2023-08-16 16:08:00 174

原创 Linux15 消息队列 线程

信号量 共享内存 消息队列 管道 套接字。

2023-08-16 11:09:21 135

原创 linux14信号量 信号量共享内存

信号量是一个特殊的变量,一般取正数值,他的值代表允许被访问的资源数目,获取资源时,要对信号量的值进行原子减1,该操作被称为p操作,当信号量的值为1时,代表没有资源可用,P操作会堵塞,释放资源时,需要对信号量的值+1,称为v操作,信号量主要用来同步进程临界资源:同一时刻,只允许被一个进程或线程访问的资源//可以是一个虚拟机,我正在使用别人就不行,也可以是一个buff,都有可能是一个临界资源临界值(区):访问临界资源的代码段。

2023-08-15 17:24:27 41

原创 linux 13 管道

linux基本命令类型:d目录 -普通 p管道权限:r w x chomd静态库libxx.a 共享库libxx.so直接拷贝 使用时拷贝 -L路径 l库名进程 复制进程fork exec替换 信号 SIGINT kill 9SIGCHLD。

2023-08-15 13:03:19 49

原创 Linux12 信号

ctrul+c(命令)——>发送信号//用信号代表这件事情产生了中断(软中断)//信号打断了进程当某个进程正在执行时,用户在终端键盘上按下某些键时,此时会产生一个硬件中断。此时终端驱动程序会将其解释为某一种信号,操作系统得知后会将该信号发送个正在前台运行的进程。并在合适的时机去处理该信号大部分信号的产生都是因为进程产生了异常只有信号才能把进程终止信号自定义signal(),将信号改变成自定义的信号,当调用signal时,内核收到信号,直接调用相应的方法忽略SIG_IGN。

2023-08-15 13:01:53 55

原创 Linux11 进程替换

库函数的是实现在库里,属于用户自己的代码,系统调用就是内核中的函数,编译内核的时候就实现了他,系统调用的函数用户可以指定,内核中的函数,用户无法指定。8、每一个进程都会有一个进程控制块PCB,是一个结构体,有多少个进程就有多少个进程控制块。3、先打开文件再进行复制,父进程和子进程轮流对文件进行操作,共享文件。4、先复制再到开文件,父进程和子进程分别对文件进行操作。2、父进程打开的文件fork后,子进程中使用。9、进程复制:先复制进程控制块,再复制进程。6、文件表 1024。

2023-08-15 12:59:49 22

原创 Linux10 僵死进程-文件操作

/0,1,2被占用0:标准输入:1:stdin标准输出(屏幕) 2:标准错误输出。如果子进程的父进程结束了,子进程会变成孤儿进程,它会被系统中的init(pid=1)收养。子进程先于父进程结束,父进程没有获取子进程的退出码,子进程就变成了将死进程。wait(pid)//获取 sys/wait.h//头文件。在终端中所有的进程的父进程都是bash(命令解释器)write(写入到那个文件,”数据“,数据大小);父进程结束之后,就会给出提示符,子进程自行执行。linux不存在文本和二进制之分。

2023-08-15 12:56:45 30

原创 Linux9fork 进程地址空间

放访问虚拟内存中的页面时,虚拟内存才会调回到物理内存中。当前物理内存剩余空间+虚拟内存剩余空间能否满足申请条件。malloc申请空间,当程序结束后,会被系统回收。物理内存和虚拟内存,加起来是最大能申请的空间。malloc能申请多大,32位,理论

2023-08-15 12:43:22 25

原创 Linux8 fork

代码段:存放可执行文件的操作指令,可执行程序在内存中的镜像,只允许读取,是不可写的数据段:用来存放可执行程序中已经初始化全局变量,就是放程序静态分配的变量和全局变量bss段:包含了程序中未初始化的全局变量,在内存bss段全部置零堆:用来存放进程运行中被动态分配的内存段,他的大小是不固定的,可动用函数分配内存时,新分配的内存就被添加到堆上,当使用函数释放内存时,被释放的内存从堆中剔除。

2023-08-15 12:42:20 18

原创 Linux7库文件

库文件:预先编译好的文件的集合.c 编译成.o,将.o集合起来做成库libXX.a:静态库libXX.so共享库。

2023-08-15 12:39:01 20

原创 Linux6 makefle gdb

c源文件 xx.c ->main.exe PE(win)/ main ELF(linux)跟踪程序的执行,需要一个工具 gdb//只能跟着debug的版本。删除断点:Delete+编号,断点编号用info break查看。后面加上-g就会生成包含调试信息的debug,Debug版本包含了调试信息//开发调试版。调试的对象:运行着的程序(跟踪进程的执行)L+文件名+n:跳转到这个文件的第n行。一定要编译成debug版本的!L N:跳转到当前代码的地n行。b+n,在第n行加断点。r:运行程序,启动程序。

2023-08-15 12:14:48 23

原创 linux5程序编程

在计算机上能直接执行的是二进制指令,我们进行编写的是高级语言,经过几步执行为可以在计算机执行的语言。-o后面紧跟的肯定是生成的东西,除了生成程序之外,其他的文件顺序无所谓,但是不能少 空格隔开。一个组合的过程,物理过程,将需要用的执行代码和库程序链接过来。运算器 控制器 存储器 输入设备 输出设备。将编译完的文件转换为二进制文件(机器语言指令)多文件编译要把所有的都编译为.c文件。Cpu 内存。最后生成的文件是main.i。编译对象是处理完的.i文件。总线是用来传输数据的。

2023-08-15 12:10:01 25

原创 c++第十章泛型程序设计与c++标准库模板

STL提供了常用的数据结构和算法,使用STL的模板时所提供的类型参数既可以是c++标准库中已经有的类型也可以是自定义的类型,只要这些类型是所要求的概念的模型,因此STL是一个开放的体系。(2)我们可以用概念来描述泛型程序设计中作为参数的数据结构所具备的功能,这里的概念是泛型程序设计中的一个术语,他的内涵是这些功能,他的外延是具备这些功能的所有数据类型。另外两个概念也具备包含和被包含关系,对于两个不同的概念 A和B,如果A所需的所有功能也是B的功能,那么就说概念B是概念A的子概念。

2023-08-09 10:02:14 33

原创 c++第九章群体类和群体数据的组织

基本数据类型是由c++系统预编译的,而自定义类型的数据是由多个基本类型或者自定义类型的元素组成,称之为群体数据,对于这些数据,仅有的系统预定义的操作是远远不够的,在很多情况下,需要设计与某些具体问题相关的特殊操作,并按照面向对象的方法将数据和操作封装起来。* 链表的结点包括数据和指针域,是链表的基本构件,结点的数据域用于存放群体中元素的内容,既可以是若干个基本类型的数据,也可以是自定义类型的数据,甚至可以是内嵌对象,结点的指针域用于存放指向下一个结点的指针(下一个结点的地址)

2023-08-09 10:00:04 170

原创 Linux-4grep-ps

9:强制结束进程kill结束不了 用 kill -9 pid 来强制结束一个进程。ctrl+c只能终止前台命令,,要终止后台命令只能用kill(利用pid)在后台,允许用户同时执行多个命令,在处理执行一个命令时,还允许处理其他命令。如果在前台执行,只有在前一个运行完成后,才能执行下一个命令。放在后台运行,就不会影响前台进程,可以继续输入下一个命令。显示当前终端的任务//在后台运行的进程,不显示前台。可以通过管道把一个命令的执行结果传给另外一个命令。能看到父进程子进程,各个进程之间的关系。

2023-08-08 16:34:35 69

原创 Linux-3 vim的使用

cat 合并文件名1 合并文件名2 >写入的文件名3//合并文件为一个新文件。Head -n文件名//头的n行,不设置就是10行。Tail -n文件名//尾的n行,不设置就是10行。加g是全文替换,不加是前面声明的几行的替换。ctrl+d//结束写入在文件中写入数据,cc:清除光标所在的一整行,进入插入模式。C:清除光标到行末的内容,进入插入模式。cat//查看文件,cat >文件名。A是在光标所在行的最末尾添加数据。I是在光标所在行的最前面插入数据。o是在光标的下一行重新起头插入。

2023-08-08 13:56:51 21

原创 Linux-2 基本命令操作

0777:第一个数字代表特殊权限 第二个数字代表属主权限,第三个数字代表属组权限,最后一个数字代表其他人权限。7:4+2+1权限:4:读 2:写 1:执行 0:-(占位)//只能这样拆。rm-r是一个递归,系统只提供了rmdir,,先删除内层文件再删除外部文件。文件权限:r:4 w:2 x:1, -:0//无权限(占位的)Rm -f:删除文件,忽略错误//删除不存在文件会忽略错误。Rmdir:删除目录文件,但是只能删除空的目录。Cd 可以进入目录文件,不能进入普通文件。Rm -r:删除目录。

2023-08-08 13:56:02 27

原创 Linux-1 目录结构文件类型

很多公司都推行自己版本的Linux,不同公司发行的Linux的安装版本不同一,通常是将软件的源代码,在发行版本上编译,生成一个适用于本发行版本的软件,从而进行使用,比win麻烦。为每一个用户在home下创建一个于自身名字相同的文件夹用于自身访问,但是用户之间不能访问,管理员可以进行访问。w上用后缀名来区分,l认为后缀是文件名的一部分,但是编译器要求,后缀正常写,否则不编。/:根目录,最顶层的目录,所有文件的路径都是从根目录开始的。只有在自己的家目录才能创建文件,普通用户只能改变自己的文件。

2023-08-08 13:54:55 20

原创 c++第八章多态性

同样的消息被不同类型的对象接收时,导致的不同的行为,消息指的是对类的成员函数的调用,不同的行为指的是不同的实现,也就是调用了不同的函数。

2023-08-03 17:05:07 42

原创 C++第七章继承与派生

定义语法:* class 派生类名:继承方式 基类名1,继承方式 基类名2……* { 派生类成员说明 }* 一个派生类可以有多个基类,这种情况称为多继承,一个派生只有一个基类的情况称为单继承。

2023-08-03 16:48:10 96

原创 c++第六章 数组指针与字符串

/string类的构造函数string();//默认构造函数//复制构造函数//用指针s所指向的字符串常量初始化string类的对象//将对象rhs中的串从位置pos开始取n个字符,用来初始化string类的对象//用指针s指向的字符串的前n个字符初始化为string类的对象//将参数c中的字符重复n次,用来初始化string类的对象;//string的简单使用int main()i++)cin >> a;return 0;

2023-07-30 20:22:11 365 1

原创 c++第五章 数据的共享和保护

如果在声明引用时,用const修饰,被声明的而引用就是常引用,常引用所引用的对象不能更新,如果常引用作为形参,那么它引用的实参将不会发生改变。* 一个变量除了在定义它的源文件中使用还可以在别的源文件中使用,这样的变量称为外部变量,命名作用域中定义的变量,默认情况下都是外部变量。* 不会随着每次函数的调用而产生一个副本,也不会随着函数的返回而失效,也就是说,在下次调用时,,它依旧保持上一回的值。

2023-07-28 18:19:15 142 1

原创 c++第四章 类和对象

复制构造函数,具有构造函数的所有特性,其形参是本类对象的引用,其作用是用一个已经存在的对象(由复制构造函数的参数指引)去初始化一个同类的新对象。* 一种特殊形态的类,也可以有自己的数据成员和函数成员,可以有自己的构造函数和析构函数,可以控制访问权限,可以继承,支持包含多态等。* 将抽象得到的数据和行为相结合,形成一个有机整体,也就是将数据与操作数据的函数代码进行有结合,形成类,其中的数据和函数都是类的成员。

2023-07-27 18:07:28 42 1

原创 c++第三章函数

2、递归时,必然有函数值没有返回,对他的再次调用发生,相同名称的局部变量会拥有不同的值,他们同时存在,相互不影响,他们必然有不同的地址。* 函数重载:两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型以及个数的最佳匹配,自动确定调用哪一个函数。* 定义:调用其他函数的函数叫做主调函数,被调用的函数称为被调函数,函数既可以被调用也可以调用其他函数。

2023-07-26 15:35:58 54 1

2022.12.03matlab实验12

2022.12.03matlab实验12

2023-04-17

2022.12.03matlab实验11

2022.12.03matlab实验11

2023-04-17

2022.11.27matlab实验十

2022.11.27matlab实验十

2023-04-17

2022.11.27matlab实验九

2022.11.27matlab实验九

2023-04-17

2022.11.24matlab实验八

2022.11.24matlab实验八

2023-04-17

2022.11.24matlab实验七

2022.11.24matlab实验七

2023-04-17

空空如也

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

TA关注的人

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