- 博客(110)
- 资源 (1)
- 收藏
- 关注
原创 网络基础概论
基于数据报的服务,是相对基于流的服务而言的。如下图,应用程序A要将数据”hello”传给网络上另外一台主机上的应用程序B,数据“hello”从应用层发送给传输层后,传输层在数据前面加上tcp协议或udp协议的报头,将整条报文发给网络层,网络层添加自己的IP报头,再将整条数据发送给数据链路层。可见,IP协议使用逐跳的方式确定通信路径。因此,这一层的主要功能是在物理层提供的比特流的基础上,通过差错控制,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。...
2022-07-26 20:40:23 735 1
原创 多重继承与派生类成员标识
有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,不要设计出菱形继承。否则在复杂度及性能上都有问题。
2022-07-26 09:06:40 455
原创 C++ 不同继承之间的的关系
公有继承与组合的区别继承与组合都是面向对象中代码复用的方式。父类的内部细节对子类可见,其代码属于白盒式的复用;例如。
2022-07-21 00:00:37 774
原创 C++继承和派生
C++通过类派生(classderivation)的机制来支持继承。被继承的类称为基类或超类(superclass),新产生的类为派生类(derivedclass)或子类(subclass)。基类和派生类的集合称作类继承层次结构(hierarchy)。class派生类名访问限定符基类名{private成员表1;//派生类增加或替代的私有成员public成员表2;//派生类增加或替代的公有成员protected成员表3;private。...
2022-07-20 08:48:53 3612
原创 C++友元(friend)
友元分为外部函数友元, 成员函数友元,类友元。不具有对称性:A 是 B 的友元, 并不意味着 B 是A的友元不具有传递性:A是B的友元, B是C的友元, 但A不是C的友元。不具有继承性: Base 类型继承 Object类型, 如果Object 类型是A的友元,但Base类型不是A友元。外部函数友元:示例需要在类中进行对其进行声明,则可以访问类的所有成员成员函数友元将一个成员函数声明成友元的时,必须要指明该成员函数属于哪个类:总结:1.友元函数不是类的成员函数,在函数体中访问对象的成员,必须
2022-06-27 18:06:43 575
原创 Linux ---信号的使用
文章目录信号信号1.信号的概念:信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。与信号有关的系统调用在“signal.h”头文件中有声明常见信号的值,及对应的功能说明信号的值在系统源码中的定义如下:#define SIGHUP 1#define SIGINT 2 //键盘按下 Ctrl+c 时,会产生该信号#define SIGQUIT 3#define SIGILL 4#define SIGTRAP 5#define SIGABRT 6#define SIG
2022-05-25 15:07:52 341 1
原创 C++基础 函数重载
缺省参数一般情况下,函数调用时的实参个数应该与形参相同,但是为了更方便的使用函数,C++ 也允许缺省值中给函数的默认值的给法从右向左给,默认值不一定是一个常量也可能是一个函数的返回值函数的默认值在函数的声明中给,最好不要咋函数的定义中给在多文件结构中,在声明中给默认值,并且在声明中可以省略参数名称不能形参作为另一种函数的默认值重载概念:在C++中可以为两个或者两个以上函数提供相同的函数名称,只要参数类型不同,或者参数数目不同,参数顺序不同,即参数表不同,那么就认为是函数的重载。(函数名+参数
2022-05-20 16:14:31 283
原创 Linux----printf函数输出与主函数参数
文章目录printf函数输出问题主函数参数printf函数输出问题printf 函数并不会直接将数据输出到屏幕,而是先放到缓冲区中,只有一下三种情况满足,才会输出到屏幕。缓冲区满强制刷新缓冲区 fflush程序结束时主函数参数int main( int argc, char argv[], char envp[])**(1) argc 参数个数(2) argv 参数内容(3) envp 环境变量代码示例如下#include <string.h>#include
2022-05-18 23:46:52 525
原创 Linux基础-----库文件的生成与使用
文章目录库文件的生成与使用1. 什么是库文件2.静态库的生成和使用2.1静态库的生成2.2 静态库的使用3.共享库的生成和使用3.1共享库如何生成4.静态库和共享库的区别库文件的生成与使用1. 什么是库文件库是一组预先编译好的函数方法的集合Linux上库文件的存放位置:/lib和/usr/lib库分为两种:静态库和共享库Linux上静态库标识(libxxx.a) ,共享库(libxxx.so)Windows上静态库标识(.lib),共享库(.dll)2.静态库的生成和使用2.1静态库的生成
2022-05-18 15:16:22 2135 1
原创 C++基础---缺省参数
文章目录缺省参数定义用法缺省参数一般情况下,函数调用时的实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形参不相同。定义缺省参数指在定义函数时为形参指定缺省值(默认值)。这样的函数在调用时,对于缺省参数,可以给出实参值,也可以不给出参数值。如果给出实参,将实参传递给形参进行调用,如果不给出实参,则按缺省值进行调用。缺省参数的函数调用:缺省实参并不一定是常量表达式,可以是任意表达式,甚至可以通过函数调用给出。如果缺省实参是任意表达式,则
2022-05-15 21:44:11 431
原创 C++基础----inline函数
inline 函数当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等等,这些工作需要系统时间和空间的开销。请看如下程序段,读入一行字符串,逐个判断是否为数字字符:#include<iostream>using namespace std;bool IsNumber(char ch){return ch>= ʹ0ʹ && ch <= ʹ9ʹ ? 1 : 0;}int main(){char ch;while(ci
2022-05-14 00:20:24 355
原创 Linux基础----编译与调试
文章目录编译与调试1.gcc,g++, gdb的安装1.1 gcc的安装1.2 g++的安装1.3 gdb的安装2.gcc分步进行编译3.一步编译3.1 上述四个步骤,怎么通过一行代码,直接将源文件变成可执行文件呢?3.2 前三个步骤,怎么通过一行代码,直接将源文件变成目标文件“.o”呢?4.编译链接过程5.g++6.makefile和make6.1 make的安装6.2 makefile和make命令的介绍6.3 makefile文件的规则和make的使用7.gdb调试7.1 Debug版本和Releas
2022-05-14 00:00:29 2600
原创 Linux基础---(常用命令介绍)
文章目录常用命令介绍1.基本命令1. pwd2. cd3.ls4.man5.touch6.mkdir7.rm8.cp9.mv(剪切,移动,重命名)10.find11.grep过滤12.管道'|'13.wc14.su15.关机和重启16:修改用户密码2.打包,解包,压缩,解压命令2.1:tar 将文件打包 或者 解包2.1.1 tar打包过程:2.1.2 tar解包过程:2.2 gzip 对文件进行压缩和解压2.2.1 gzip对文件进行压缩2.2.2 gzip对压缩包进行解压2.2.3 通过tar命令对xx
2022-05-12 17:50:15 1747 1
原创 Linux基础---系统文件类型与文件权限
文章目录Linux系统文件类型和文件权限1.文件类型2.文件权限3.如果修改文件权限3.1 文字设定法3.2 数字设定法Linux系统文件类型和文件权限1.文件类型Linux系统认为一切皆文件所以Linux将所有的东西都看做文件,所以将其分了这些类:普通文件 “-”目录文件 “d” (directory)管道文件 “p” (piping)链接文件 “l” (link)设备文件(块设备“b”(block), 字符设备“c”(char))套接字文件 “s” (socket)具体含义解释
2022-05-12 09:34:14 340
原创 C++基础---(引用)
引用:别名特点:定义引用必须初始化没有空引用引用没有二级引用引用和指针的区别?从语法规则上讲,指针变量存储某个实例(变量或者对象)的地址:引用是某个实例的别名程序会为指针变量分配存储空间;但是不给引用分配内置类型访问最好用值传递,自定义类型访问用引用方式传递好深入理解计算机里面的第一章第六章第九章inline 函数...
2022-05-11 11:11:44 170
原创 C++ 基础----(const与指针)
文章目录const与指针const用法const在C语言中和C++中的区别const与指针的关系const与指针const用法const在类型名之前,不能通过指针修改指针指向的值,如下面示例,我们不能通过p1的解引用来修改a的值。int a =10; const int *p1 = &a; // ok *p1 = 100; //errorcosnt在指针名之前,不能修改指针指向的地址如下面示例,p2指向a的地址之后,将不能改变它的指向int a = 10;i
2022-05-11 10:34:58 187
原创 C++基础---初始化与输入输出
文章目录C++的初始化输入输出C++的初始化相比于C语言,C++对变量的初始化有多种方式,如:int main(){ int a =10; int b(10); int c{10}; return 0; } 可以看到在C++ 中上述三种方式都可以成功的对变量进行初始化,但是如果在定义变量不给初值的时候,这三种方式还是有区别的,如下图:可以看到 a变成了随机值,b无法定义,c被初始化为了0,因此这三种初始化方法中,最后一种方法是比较好的。当然 初始化数组也可以用大括号的形式如:
2022-05-10 11:25:58 513
原创 八大排序之快速排序以及优化(5)
文章目录快速排序快速排序递归形式算法步骤代码实现快速排序非递归形式算法优化快速排序快速排序是一个在大多数情况下排序性能最好的一个算法,通常情况下,数据规模越大,数据越乱,快速排序的性能越好。下面将说明快速排序具体实现进行说明,并对其进行优化。快速排序递归形式算法步骤代码实现在这里插入代码片快速排序非递归形式算法优化...
2022-04-24 10:53:09 472
原创 字符串匹配(2)----KMP算法
文章目录字符串匹配-KMP算法算法流程字符串匹配-KMP算法我们将介绍KMP算法进行字符串匹配,Knuth-Morris-Oratt字符串查找算法,主要用于在一个文本串(主串)查找一个模式串(子串)的出现位置。算法流程假设...
2022-04-04 20:45:56 427
原创 字符串匹配(1)--- BF算法
字符串匹配BF算法如果i和j指向的字符相同,则i++,j++如果i和j指向的字符不相同,则i=i-j+1,j=0;退出条件: 如果i或者j走出自身范围(越界)退出之后,我们需要判断到低子串在主串中出现与否代码实现int BF_search(const char *str,const char *sub,int pos){ assert(str != NULL && sub != NULL && pos >= 0 && pos <
2022-04-02 10:51:50 853
原创 C语言每日一练---旋转图像
文章目录题目题目要求示例:题目分析程序实现测试算法复杂度分析题目给定一个n∗nn*nn∗nF的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。题目要求必须在原地旋转图像,不能借助额外的空间,这就意味着必须直接修改二维矩阵。示例:输入:matrix= {{1,2,3},{4,5,6},{7,8,9}}输出:{{7,4,1},{8,5,2},{9,6,3}}题目分析以上图为例,我们分析图像顺时针旋转90度后,每个数字的变化规律,我们需要先将外圈数据[1,2,3,6,9,8,7,
2022-03-30 22:15:59 1273
原创 八大排序之二路归并排序(4)
文章目录归并排序排序规则代码实现测试算法复杂度分析归并排序首先将所有数据默认每个数据单独分成一个组,接下来两两合并,当所有数据在同一个组内,则排序完成。排序规则将所有数据单独给每个数每个组(每个数据单独看,就是有序的)然后将数据进行两两合并成一组,对每一组数据进行排序然后继续把数据两两合并排序,直到只有一组数据原始数据: 84 9 18 19 48 12 90 &
2022-03-29 21:19:16 319
原创 八大排序之选择排序和基数排序(桶排序) ---(3)
主要介绍了选择排序和基数排序的算法思想,排序规则,并用C语言将其实现,最后再分析了其算法复杂度
2022-03-26 10:02:12 1888
原创 Linux基础---简介以及目录结构
文章目录Linux基础1.为什么要学习Linux2.Linux学习方法一、Linux介绍二、Linux简介1.Linux和Windows系统区别2.Linux的内核版本和发行版本1)查看自己的内核版本号2)linux的发行版本3.桌面介绍三:Linux目录结构1.linux的文件目录结构图:2.常用目录介绍:Linux基础1.为什么要学习Linux1.对于绝大多数企业来说,服务器一般安装在Linux上2.现在主流的云计算包括大数据,等等都是默认支持Linux系统3.面试岗位需求2.Linux学习
2022-03-25 16:52:11 351 2
原创 C语言实现飞机订票系统
为了增加对数据结构中链表知识的理解和对实际问题的应用,文中将用C语言实现飞机订票系统,主要实现了机票信息的添加、查找、显示、修改和订票、退票功能,其中用链表来存储数据,程序结束时,可以把数据保存到文件中。
2022-03-24 11:24:29 12518 14
原创 C语言每日一练---移动数组中的零元素
题目:移动数组中的零元素给定一个数组nums,编写一个函数将所有的000移动到数组末尾,同时保持非零元素的想对顺序,要求不借助额外空间,在原数组的基础上进行操作。示例输入:nums = [0,1,0,3,12]输出:[1,3,12,0,0]题目分析代码实现void Swap(int* a, int* b){ int tmp = *a; *a = *b; *b = tmp;}void MoveZeroes(int* nums, int numsSize){ int left =
2022-03-19 10:21:20 2189
原创 为什么要构建哈希表?
为什么要构建哈希表?现在有一组数据,我们想查找一个值(x)是否在这组数据中,通常来说,我们需要把这组数据遍历一遍,来看看有没有x这个值。这时,我们发现这样查找数据要花费的时间复杂度为O(n),链表、顺序表都是如此。为了降低查找数据的时间复杂度,那我们就不能去遍历所有的数据来查找,我们需要找到新的方法来查找数据,这时我们就引入了哈希表。哈希哈希就是根据设定好的哈希函数和处理发生哈希冲突的解决方法,哈希是一种存储方法,也是一种查找方法,算法中只要用到这种哈希思想,就可以叫做哈希算法(hash)哈希函
2022-03-15 13:48:27 1307
原创 C语言每日一练---旋转数组
题目描述:给你一个数组,将数组中的元素向右轮转K个位置,其中K是非负数,然后返回新数组示例:输入:[1,2,3,4,5,6,7],k=3;输出:[5,6,7,1,2,3,4]方法一:使用额外的数组,申请一个和原数组长度等同的数组来把每个元素放到正确的位置上。先把原数组的最后k个值放到新数组的前k个位置,再把原数组剩下的元素依次放在后面。void rotate(int* nums, int numsSize, int k){ int* new_nums = (int*)m
2022-03-12 22:56:39 2027
原创 哈希----链地址法
代码#pragma once//链式哈希//链地址法中后边链接的单链表的有效节点设计:typedef int ELEM_TYPE;#define MAX_SIZE 12typedef struct Node{ ELEM_TYPE data; //一个数据域 struct Node* next; //一个指针域}Node,*PNode;typedef struct Head{ struct Node arr[MAX_SIZE]; //每一个格子存放一个单链表的表头(用...
2022-03-12 22:09:44 16322 2
原创 C语言每日一练----买卖股票的最佳时机
题目描述:给定一个最佳数组prices,其中prices[i]表示股票第i天的价格。在每一天,你可能会决定购买和出售股票。你在任何时候最多只能持有一股股票。你也可以购买它,然后在同一天出售。你需要返回你所能获得的最大利润。示例: 输入: prices = {7,1,5,3,4,6,1}输出: 7解释:第二天买入,,第三天卖出,获利4,第四天买入,第六天卖出,获利3,一共获得利润为7.分析:我们需要在股价低的时候买入股票,股价高的时候卖出。因此购买时间可这样定...
2022-03-11 14:46:12 2115
原创 C语言每日一练---利用双指针的方法删除排序数组中的重复项
给定一个升序排列的数组nums,请原地删除重复出现的元素,使每个元素只出现一次,返回删除后的数组新长度。元素的相对顺序应保持一致。要求:返回新数组的长度和数组元素,不能使用额外空间,必须在原数组上进行修改。例:输入:nums = [1,1,2]输出: 2, nums = [1,2]定义两个指针fast和slow,fast表示遍历数组到达的下标位置,slow表示下一个不同元素要填入的下标位置,初始两个指针都指向1,假设数组nums的长度为n,那么fast将遍历1到n-1每一个位置,对于每个位置
2022-03-10 21:05:20 654
原创 两个栈实现一个队列的功能
用两个栈实现一个队列,栈采取之前实现的顺序栈,具体实现的规则如下:首先定义两个栈s1,s2。入队规则: 入队只向s1入队出队规则:看s2有没有值,有的话,直接出即可。如果s2没有值,将s1里面的值全部颠倒放入s2中,然后再从s2出队两个栈实现一个队列的结构体定义://用两个栈模拟实现的结构体typedef struct Two_stack_queue{ Stack s1; Stack s2;}Two_stack_queue ,*PTwo_stack_queue;
2022-03-08 15:44:51 744
原创 链表----队列
队列的链表实现形式,在链表中,入队操作相当于链表中的尾插操作,出队操作相当于链表当中的头删操作。为了使得在链表中队列的出队入队操作的时间复杂度也都是O(1)因此我们需要第一时间可以找到链表的头和链表的尾。为此,我们需要在头结点中定义两个指针域分别指向队列的头节点的地址和队列的尾节点的地址。具体结构如下图所示:头节点的结构体成员里面有两个指针域,而有效数据节点的结构体成员只有一个指针域,因此为了避免空间浪费,我们对头节点和有效数据节点分别单独设计结构体:typedef int ELEM_TY
2022-03-07 22:07:01 2567
原创 C语言小项目----图书馆管理系统
一个用C语言实现的图书馆管理系统的小项目,项目中实现了图书的增删改查功能和读者的增删改查功能以及借还书登记功能。
2022-03-05 22:21:30 19985 11
原创 链表----栈
链栈: 单链表的基础上实现即可用单链表的头插和头删代替表尾进行插入和删除 push(头插) pop(头删)入栈操作(相当于单链表的头插函数)bool Push(PLStack ps,ELEM_TYPE val){ assert(ps != NULL); if (ps == NULL) { return false; } struct LStack* pnewnode = (struct LStack*)malloc(1 * sizeof(ELEM_TYP...
2022-03-04 21:27:36 1552
原创 寻找单链表倒数第K个节点
单链表只能从前往后跑,不能从后往前,因此我们申请两个指针p,q,让q指针先向前走K步,然后两个指针同时向后跑,当q指针跑到NULL时,q指针所处的位置就是我们要寻找的倒数第K个节点//找到单链表倒数第K个节点struct Node* Get_K_Node(PNode plist, int K){ assert(plist != NULL); assert(K >= 1 && K <= Get_length(plist)); PNode p = plist; .
2022-03-03 09:00:00 403
原创 删除链表任意一个节点(不包括尾结点)
//删除任意一个节点(这个节点不能是尾结点)(狸猫换太子)bool Del_Node(struct Node* p){ assert(p != NULL);//确保p存在 assert(p->next != NULL); //确保狸猫的存在(p不能是尾结点) PNode q = p->next; p->data = q->data; p->next = q->next; free(q); return true;}...
2022-03-02 09:00:00 806
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人