自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (4)
  • 收藏
  • 关注

原创 运输层

TCP 首部格式 序号:用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。 确认号:期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。 数据偏移:指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度...

2020-08-25 11:37:35 163

原创 C大小端存储

大小端模式介绍大端(存储)模式:是指一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。 小端(存储)模式:是指一个数据的低位字节序内容存放在低地址处,高位字节序的内容存放在高地址处。(可以总结为“小小小”即低位、低地址、小端)用联合体实现大小端判断联合体是一个在同一个存储空间里存储不同类型数据的数据类型。这些存储区的地址都是一样的,联合里不同存储区的内存是重叠的,修改了任何一个其他的会受影响。#include <stdio.h>int main(){

2020-08-24 14:55:35 223

转载 C++类大小的计算

平时所声明的类只是一种类型定义,它本身是没有大小可言的,如果用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。首先,类大小的计算遵循结构体的对齐原则 类的大小与普通数据成员有关,与成员函数和静态成员无关。即普通成员函数,静态成员函数,静态数据成员,静态常量数据成员均对类的大小无影响 虚函数对类的大小有影响,是因为虚函数表指针带来的影响 虚继承对类的大小有影响,是因为虚基表指针带来的影响 空类的大小是一个特殊情况,空类的大小为1静态数据成员之所以不计算在类的对象大小内,是因为类

2020-08-18 19:47:05 111

原创 结构体对齐规则

结构体默认的字节对齐一般满足三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员自身大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);(每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的)3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。struct X{

2020-08-18 17:49:32 309

转载 进程间通信

转自:https://mp.weixin.qq.com/s?__biz=MzI1OTY2MzMxOQ==&mid=2247489720&idx=1&sn=edf215b30cad5df49ce8a511f5885c0c&chksm=ea742c00dd03a516ac832cbe13b269a8bfb6afac2d8f2b483c14ce5a7254243a96f6429f61ab&mpshare=1&scene=23&srcid=0811JHce2z

2020-08-13 19:23:55 65

原创 C++类成员访问控制及继承的访问控制

类成员访问控制:公有类型成员定义了类的外部接口,在类外智能访问类的公有成员;私有成员只能被本类的成员函数访问,来自外部的任何访问都是非法的,完全隐藏在类中,保护了数据的安全性;保护类型成员的性质和私有成员性质相似,其差别在于继承过程中对产生的新类的影响不同,意义在于不想向外部暴露某个函数或者成员变量,但又想让派生类知道和访问这个成员,就将其用protected标志。是一个平衡点,既能实现成员隐藏,又能方便继承。类的继承方式:(1)公有继承派生类内部可以访问基类中public和prot

2020-08-10 18:00:04 315

原创 结构体与类的区别

结构体是为能够保存不同类型的数据而存在的,因为数组只能够保存一种数据类型,而在平时的编程中我们需要用到不同数据类型的一个整体结构,这时就要用到一个新的数据类型——结构体,来保存这些不同的数据类型的数据的集合。C语言的结构体中只允许定义数据成员,不允许定义函数成员,C语言没有访问控制概念,全部成员是公有的;C++为C语言的结构体引入了成员函数、访问权限控制、继承、包含多态等面向对象的特性。C++中结构体是一种特殊类型的类,和类一样有数据成员、函数成员,可以有自己的构造函数和析构函数,可以控制访问权限,

2020-07-07 10:38:01 357

原创 sizeof和strlen的区别

sizeof:用来计算变量或者对象、类型所占字节的多少strlen:用来计算字符串的长度,遇到第一个NULL('\0')为止,不包括‘\0’sizeof是一个关键字不是函数,发生在编译时刻,所以可以用作常量表达式总结如下,当参数分别如下时,sizeof返回的值表示的含义如下: 数组——编译时分配的数组空间大小; 指针——存储该指针所用的空间大小(在32位系统是4,在64系统是8); 类型——该类型所占的空间大小; 对象——对象的实际...

2020-07-07 09:54:54 56

原创 滑动窗口算法框架及相关例题

滑动窗口算法框架:移动右侧窗口,进行窗口内数据的一系列更新;判断左侧窗口是否需要收缩,再左移窗口,进行窗口内数据的一系列更新。/* 滑动窗口算法框架 */void slidingWindow(string s, string t) { unordered_map<char, int> need, window; for (char c : t) need[c]++; int left = 0, right = 0; int valid = 0;

2020-07-01 14:34:57 234

原创 C++智能指针

参考:https://www.cnblogs.com/wxquare/p/4759020.html我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存被称为自由空间或者堆。程序用堆来存储动态分配的对象即那些在程序运行时分配的对象,当动态对象不再使用时,我们的代码必须显式的销毁它们。使用普通指针,容易造成堆内存泄露(忘记释放),程序异常的进入catch块忘记释放内存、二次释放等问题,使用智能指针能更好的管理堆内存。智能指针实际上为一个类对象,行为上像一个指针。在被调函数执行完,程序过期时

2020-07-01 10:20:12 69

原创 C++引用的用法

在C语言中这个符号表示了取地址符,取地址符常常用来用在函数传参中的指针赋值。但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法。一、引用简介引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名  说明:  (1)&在此不是求地址运算,而是起标识

2020-06-29 21:58:09 4106 1

原创 const的用法

const主要是用来防止定义的对象再次被修改,定义对象变量时要初始化变量const可用于修饰变量、指针、函数参数和返回值、类数据成员、类成员函数、对象(1)修饰变量用于定于常量变量,这个变量在后面就不可被修改const int Val = 10; //Val = 20; //错误,不可被修改(2)修饰指针主要看const在*的前后,在前则指针指向的内容为常量,在后则指针本身为常量;①指向const变量的指针:②const指针const int *ptr; //

2020-06-29 18:48:56 97

原创 9、桶排序

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:(1)在额外空间充足的情况下,尽量增大桶的数量(2)使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。1、思路:将N个待排序数字分配到K个桶中(保证均匀),再将每个桶中的数字用插入排序方法排序,最后将每个桶中的数字连接起来。2、图片演示3、C++代码实现#i.

2020-06-27 17:57:34 123

原创 8、计数排序

计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。计数排序的基本思想是:对每一个输入的元素X,确定小于X的元素个数。利用这一信息。就可以直接把X放到它在输出数组的位置上了。计数排序的特点:当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与

2020-06-26 21:42:10 140

转载 C(string.h)字符串操作函数总结

收藏转自:https://blog.csdn.net/qq_33757398/article/details/81212618

2020-06-21 10:52:21 89

原创 13、机器人运动范围

题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路回溯法C++代码实现int movingCount(int threshold, int rows, int cols) {

2020-06-06 20:18:05 111

原创 12、矩阵中的路径

题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。思路利用回溯法解决任选一个格子作为路径的起点,假设矩阵中某个格子为ch,并且这个格子对应路径

2020-06-06 20:04:39 124

原创 11、旋转数组中的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:直接遍历、或者用sort函数排序后返回第一个元素,能返回正确的结果,但是没有利用旋转数组的特性,故不符合要求。可使用二分查找,能使用二分查找的前提是选取中间值后,可以顺利的找到待查找元素所在的区间(进而缩小

2020-05-13 12:48:06 78

原创 10、斐波那契数列

题目一:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39题目二:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目三:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目四:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,

2020-05-12 21:50:00 191

原创 7、快速排序

快速排序在时间复杂度为为O(N*logN)的几种排序方法中效率较高,主要采用分治法的排序思想。快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。由于关键词的比较和交换是跳跃的,所以快速排序是一种不稳定的排序。1、算法步骤1)先从待排数列中找到一个数作为基准数(主元);2

2020-05-10 23:37:59 518

原创 41、数据流中的中位数

题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。思路从数据流中读到数字,有多中数据结构储存,所以对应多种解决方法,有不同的时间复杂度。数据结构...

2020-04-26 12:11:08 91

原创 54、二叉搜索树的第K个结点

题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路二叉搜索树的中序遍历序列是一个从小到大的有序序列,故二叉搜索树第k(大、小)个结点问题,就是中序遍历二叉搜索树,对序列结果对应输出第K个有递归和非递归两种遍历方式,可看作遍历+按条件输出结点。C++实现/****递归遍历,将结果...

2020-04-26 11:17:40 85

原创 37、序列化二叉树

题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺...

2020-04-26 10:55:38 81

原创 6、归并排序

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:(1)自上而下的递归(所有的递归都可以用迭代重写,故有第二种方法)(2)自下而上的迭代归并排序是建立在合并两个有序数列的基础上的,如何合并两个有序的数列?首先申请两个数列长度和的空间Tem...

2020-04-25 11:53:21 186

原创 32、从上到下打印二叉树(层序遍历)

题目题目一:不分行从上到下打印二叉树题目二:分行从上到下打印二叉树(每一层打印到一行)题目三:之字形打印二叉树(第一行从左到右,第二行从右到左,......)思路二叉树的层序遍历本质上就是广度优先搜索(BFS),题目二、三无非就是输出格式上添加一些细节限制。广度优先搜索的基本套路:无论遍历一幅有向图还是一棵树,都要用到队列。 首先把起始节点(对树而言是根节...

2020-04-19 23:20:30 94

原创 28、对称的二叉树

题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路前序遍历是:先遍历父结点,在遍历左结点,在遍历右结点;定义对称前序遍历:先遍历父结点,在遍历右结点,在遍历左结点。得到的就是二叉树镜像的前序遍历序列。只需要比较两种遍历序列就可以判断二叉树是否对称。C++代码实现 bool isSymmetric...

2020-04-19 22:19:36 64

原创 27、二叉树的镜像

题目请完成一个函数,输入一棵二叉树,该函数输出它的镜像。思路先前序遍历这棵树的每个节点,如果遍历到的节点有子结点,就交换它的两个子结点。当交换完所有的非叶节点的左、右子节点之后,就得到了树的镜像。C++实现void MirrorRecuriverly(TreeNode* pNode){ if(pNode == nullptr) return; ...

2020-04-19 22:03:35 52

原创 8、二叉树的下一个节点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路1、若该结点有右子树,则右子树的最左结点是要找的下一个结点;2、若该结点没有右子树,则检查父结点,若为父结点的左子结点,则父结点为要找的下一个结点;若为父结点的右子结点,则指向父结点的指针向上遍历,直到找到一个结点是其父结点的左子结点,则...

2020-04-16 11:39:38 52

原创 7、重建二叉树

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路1、前序遍历序列的第一个元素是根结点root;2、遍历中序遍历序列,找到根结点root的位置,分割序列,root前面的序列为左子树序列,...

2020-04-15 23:50:20 104

原创 6、从尾到头打印链表

题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路思路一:“从未到头”输出 = “后入先出” 栈,建立一个栈,遍历链表压入栈,再弹出思路二:递归打印下一个结点;递归的实质就是栈思路三: 调用库函数,1、vertor自带函数,头插insert(res.begin(),val)(好像效率不高);2、尾插push_back(),再用reverse()反转...

2020-04-15 22:25:21 179 1

原创 23、链表中环的入口结点

题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路思路一:暴力法,用数组记录遍历过的结点,容易想到。缺点:时间复杂度为O(),需要额外的数组。 ListNode* EntryNodeOfLoop(ListNode* pHead) { ListNode * res = NULL; ListNode *...

2020-04-14 23:07:48 106

原创 C++结构体指针 使用注意

声明一个结构体指针记得初始化,一定要初始化,不初始化会出事参考:https://blog.csdn.net/lwgkzl/article/details/81866016?指针的危险:long* fellow;*fellow = 23333;上述代码中没有讲地址赋给fellow。C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针多指向的数据的内存。...

2020-04-14 12:59:49 225

原创 18、删除链表中重复的结点

题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路当前结点与下一(或多个)结点值相等,则删除这些结点。遍历直到p = NULL 或者p->next = NULL。需解决问题:(1)如何删除当前...

2020-04-14 12:12:43 53

原创 5、堆排序

堆排序是对简单选择排序的升级,利用堆这种数据结构所设计的一种排序算法。堆是一个完全二叉树的结构,子结点的键值或索引总是小于(或者大于)它的父节点。分为:(1)大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;(2)小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;大(小)顶堆删除堆顶元素,将剩下的元素再次调成成大(小)顶堆,时间复杂度...

2020-04-13 00:55:40 137

原创 4.希尔排序

希尔排序是第一批突破O()的排序算法之一。希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的: (1)插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率; (2)但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;希尔排序的基本思...

2020-04-12 13:16:50 184

原创 3.插入排序

基本思路:扑克牌的摸牌、理牌。基本操作:将一个记录插入到已经排好序的有序表中,得到一个新的、记录数增1的有序表。可做优化,找插入位置时采用折半查找。1、算法步骤(1)将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。(2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插...

2020-04-10 10:37:41 66

原创 2.选择排序

基本思路:每次选取剩余元素中的最小元素,添加有序序列的末尾。选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。1、算法步骤(1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(2)再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。(...

2020-04-10 00:33:59 66

原创 1.冒泡排序

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这...

2020-04-09 23:46:14 109

原创 Introduction-十大经典排序算法

本系列算法整理自:https://github.com/hustcc/JS-Sorting-Algorithm;https://www.runoob.com/w3cnote/ten-sorting-algorithm.html 加自己的总结排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是...

2020-04-09 21:55:57 116

原创 19、正则表达式的匹配

题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配方法分析:一个字符匹配情况:字符串中的字符 = 模式中的字符 字符串中的字符 ...

2020-04-06 10:26:36 53

Java学生成绩管理系统.rar

学生成绩管理系统(附设计报告),内含简单的选课程序,使用JAVA进行前端设计,后台数据库使用MYSQL,代码运行无误,获得优秀课程设计

2019-08-27

Internet开发技术教材(2017内部讲义)

Internet开发技术教材

2017-06-22

同学通讯录管理程序(内附设计报告)

实现对学生信息(学号、姓名、系别、邮箱、电话)的添加、显示、选中修改、删除、并保存为文件的功能。代码运行无误,内附设计报告,可帮助理解代码。获得优秀课程设计。

2017-05-25

网络编程TCP服务器、客户端聊天程序,多线程,全双工通信

c语言写的TCP服务器、客户端程序,使用多线程可实现全双工通信,代码无误可完美运行,欢迎下载。

2017-04-09

空空如也

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

TA关注的人

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