自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构——顺序表【C】

头插与尾插不同的是,需要挪动数据将数组中的每一个元素向后移动一位,然后我们在空出的头位置插入数据。这里任意位置的数据就是容器中任意元素下标位置,同样的插入数据还使用挪动数据,将末尾到pos位置的数据向后挪动一位,在空出的pos位置插入数据。在尾插只前我们还要考虑容器是否有足够的空间,若是足够直接插入数据,若是不够则需要动态开辟数组。所释放动态开辟数组的空间,并设置指向的指针为空指针,有效数据个数和容器空间大小设置为0。头删也是同样的,让开始位置的后一个数据向前覆盖,将有效数据size-1即可。

2024-07-09 21:38:33 862

原创 C++多态

多态是在不同继承关系的类对象,去调用同一函数,并产生了不同的行为。两个类必须是继承关系必须通过基类的指针或者引用去调用虚函数被调用的必须为虚函数,并且在派生类中必须对虚函数进行重写。public:virtual void BuyTicket() { cout

2024-05-26 17:14:15 356

原创 C++继承(二)

菱形继承是一种特殊的多继承,两个派生类继承同一个基类,另一个类有同时继承两个派生类。菱形继承的问题在于数据冗余和二义性,就是子类中有两个父类成员。

2024-05-20 21:59:52 928

原创 C++继承(一)

继承机制是面向对象程序设计使代码可以复用的最重要手段,它允许程序员在保持原有的类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触到的复用都是函数复用,继承是设计层次的复用。public:protected:// 姓名// 年龄protected:int _stuid;// 学号protected:int _jobid;// 工号。

2024-05-17 17:24:07 878

原创 使用双指针解决问题题集(二)

输入: nums = [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2)输入:price = [8, 21, 27, 34, 52, 66], target = 61 输出:[27,34] 或者 [34,27]这里是利用单调性是指按照升序后一个数据的值是大于前一个数据的。1.首先使用双指针第一个(left)指向数组开始第二个(right)指向数组的结尾。输入: nums = [4,2,3,4] 输出: 4。时间复杂度为: O(N)

2024-05-07 20:44:48 528

原创 C++优先级队列priority_queue模拟实现

优先级队列是一种容器适配器,优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆。priority_queue默认vector作为容器,默认情况下为大堆。//默认//显示为大堆若是容器为vector,结构为小堆。

2024-05-01 23:22:48 833

原创 使用双指针解决问题题集(一)

输入:arr = [1,2,3] 输出:[1,2,3] 解释:调用函数后,输入的数组将被修改为:[1,2,3]给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。思路: 对于这道题我们可以使用 先“异地” 复写 ,后再 “就地” 复写。(推荐搭配画图一起理解)给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。输入:arr = [1,0,2,3,0,4,5,0] 输出:[1,0,0,2,3,0,0,4]

2024-04-19 16:16:46 137

原创 C++stack oj题目详解

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop()删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。示例 1:输入: [“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]

2024-04-17 23:35:30 880

原创 C++list模拟实现

/ List的节点类T _date;//List的迭代器类public:dprivate:Node _node;//list类class listpublic:public:// List的构造list();~list();

2024-04-12 16:54:18 1005 3

原创 Linux基础二(工具篇)

当我们使用gcc/g++编译时,默认编译采用release模式。vim编译器有许多种模式,但我们常用的模式只有三种分别为:命令模式、低行模式,插入模式。我们的调试工具的意义是帮助我们查找问题的,解决问题还是要靠自己。查看变量的内容(变量名)和地址(&变量名) : print/p。until : 跳转至指定行,中间的代码都是运行了的。finish: 运行结束所在的函数,就停下来。禁用断点: disable 断点编号。删除断点: delete 断点编号。启用断点: enable 断点编号。

2024-04-05 17:43:05 596

原创 C++ vector模拟实现

我们首先要断言pos防止pos大于_finish或者小于_start,然后就让pos后面的数据覆盖,前一个覆盖后一个直到等于_finish为止,_finish-1。首先数组先构造成initializer_list对象,再用 initializer_list对象构造vector对象,其中就使用到了隐式类型转换。insert在pos位置插入数据,首先要判断容器是否已满,然后将数据后移,pos位置空出在pos位置插入数据。容器begin函数返回的是容器的首地址,end()自然是返回容器的末尾处。

2024-03-31 20:56:52 1174

原创 string常见oj题详解(一) ——“ 反转字符串”,“字符串相加”,“字符串中的第一个唯一字符”,“验证回文串”,“把字符串转换成整数 (atoi)”

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = [“h”,“e”,“l”,“l”,“o”] 输出:[“o”,“l”,“l”,“e”,“h”] 示例 2:输入:s = [“H”,“a”,“n”,“n”,“a”,“h”] 输出:[“h”,“a”,“n”,“n”,“a”,“H”]给定两个指针,左指针指向字符串的开头,右指针指向最一个字符。

2024-03-27 22:58:31 588

原创 C++string的模拟实现

public://构造函数//拷贝构造//析构函数~string();//迭代器//string类访问操作//[]运算符重载//string类容量操作//string类修改字符串操作//string类字符串操作private:char* _str;public://关系运算符重载//<< 和 >> 运算符重载//getline()模拟实现。

2024-03-16 11:39:04 620 1

原创 C++中的string常用接口

注意: insert/erase/replace能少用就要少用,因为基本都要挪动数据,效率不高。shrink_to_fit() 减小字符串空间大小 (缩容)resize()将有效字符改成n个,多出的空间用字符c填充。2. append() : 在字符串后面追加一个字符串。4. replace(): 替代字符串中的字符。lenght()返回字符串的有效长度。size() 返回字符串的有效长度。capacity()返回空间的大小。reserve()为字符串预留空间。clear()清空有效字符。

2024-03-14 16:42:53 624 1

原创 C++ ——new 与 delete

int _b;delete p1;return 0;在申请一定义空间时,new会调用构造函数,delete会调用析构函数。调用operator new 函数申请空间operator new 再调用malloc在申请的空间上调用构造函数,构造对象。

2024-02-28 11:41:38 699

原创 C++——类与对象(三)

图二:d1的权限为只读,d2为可读写,Print()中的this指针权限为只读,因此d1调用Print()为权限平移,d2调用Print()函数为权限缩小。const修饰的成员函数,实际的作用在于修饰成员函数隐含的this指针,表示该成员函数不能对类中的成员进行修改。概念:一个类定在另一个类的内部,称为内部类。内部类天生就是外部类的友元类,内部类可以通过外部类的对象来访问外部类中的所有成员,但是外部类并不是内部类的友元。友元类中的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

2024-02-21 22:06:33 646 1

原创 C++—— 类与对象(二)“构造函数”,“析构函数”,“拷贝函数”,“赋值运算符重载”,

析构函数是特殊的成员函数,析构函数与构造函数的功能相反,析构函数并不时是完成对对象的销毁。对象在销毁时会自动调用析构函数,完成对象中的资源的清理工作。

2024-02-13 23:43:53 1049 1

原创 初识Linux(基础篇一)

mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,功能:touch 指令可以更改文档或目录的日期时间 ,包括存取时间和更改 ,或创建一个不存在的文件。linux 一切皆是文件 ,Linux可以统一的方式来进行文件/设备的访问。1:指令的本质是程序–指令,程序,可执行程序都是一回事,指令就是程序。

2024-02-02 16:07:42 1008

原创 C++——类与对象(一)

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。1.声明和定义都放在类体中。注意:成员函数在类体中定义,编译器可以能会当成内联函数处理。int _month;int _day;

2024-02-02 15:46:36 576

原创 C++入门(二)“内联函数inline”,“关键字auto”,“范围for”,“指针空值nullptr”

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它。C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。// 该行代码会编译失败,因为c和d的初始化表达式类型不同。

2024-01-31 18:47:48 847

原创 C++——引用(&)

引用不是重新定义新的变量 ,而是就是给变量取别名。在语法上编译器不会而外开辟空间,引用变量和原来的变量使用同一块空间。

2024-01-28 16:14:50 449

原创 C++入门 “命名空间”,“C++输入与输出”,“缺省参数”,“函数重载”

定义命名空间,要使用到namespace关键字,接上命名空间的名称。例如:int a;return a+b;命名空间之间还能相互嵌套int a;return a+b;int b;int c;return a-b;同一个项目中可以存在一个多个同名的命名空间 ,编译器最后将会合成在同一个命名空间中。一个命名空间相当于定义了新的作用域,命名空间中的内容仅限于该命名空间中。

2024-01-27 11:57:06 544

原创 数据结构 —— 二叉树(1)【C】

现在因为数组中的数据已经不构成堆了,因此我们要使用向下调整的方法调整数组中的数据使其形成一个新的小堆。堆是由顺序结构来表达的,在堆中插入节点就不仅仅值只是在物理结构上插入数据,也要符合堆的逻辑结构的规则。以小堆为例,先在数组的最后插入数据后再与前面的数据进行比较,若是小于前驱节点,就要于前驱节点的值交换,直到符合小堆的规则为止。要注意: 这里的堆要和操作系统种的堆要区分开,一个是数据结构,一个是内存的区域。大堆要满足堆中的某个节点的值总是小于父节点,小堆则相反小堆中的某个节点的值总是大于其父节点。

2023-12-21 21:55:16 971

原创 链表OJ题集合

思路: 首先同遍历两个链表 ,判断两个链表的尾节点是否相同并求出两个链表各自的长度。思路: 将小于x值的节点和大于x值的节点放入不同的链表中,不能更改顺序。思路: 创建三个指针 ,p1指向NULL,p2指针头节点 ,p3 指向头节点的下一个节点。创建prev指针使其指向原链表的节点,遍历链表判断节点中的值是否等于val 如果不等于val值将节点存入新链表中。思路:创建新的链表将两个原链表中的节点进行比较,再放将的较小值的节点放入新链表之中。创建新的链表将不需要删除的 节点存入新的链表之中。

2023-11-18 15:48:53 50 1

原创 【C】结构体(struct)详解(一)

根据对齐规则结构体的第⼀个成员对⻬到相对结构体变量起始位置偏移量为0的地址处 c1 对齐0地址处(红色),其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。根据对齐规则嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构体 s3 的大小为16 对齐到8~23地址处(蓝色),double类型 d对齐到24 ~ 31地址处(绿色 )。其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处,c2 对齐1地址处(橙色) ,i 的对齐数为4 因此对齐4 的整数倍 4~7地址处(绿色)。

2023-10-08 20:07:06 148 2

原创 【C】数据在内存中存储

大端储存:是指数据中的低位字节的内容保存在内存的高地址处,高字节的内容保存在内存的低地址处。小端储存:是指数据中的低位字节的内容保存在内存的低地址处,高字节的内容保存在内存的高地址处。

2023-10-05 11:26:51 67

原创 【C】字符函数和字符串函数

返回指向 str2 中第一次出现的 str1 的指针,如果 str2 不是 str1 的一部分,则返回一个空指针。通过返回的值来判断字母的大写,如果c确实是大写字母,则为不同于零的值(即true)。的,C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动。的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应。有对应的错误信息的。C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。

2023-09-15 11:44:42 57

原创 C语言指针基础(二)

⼀样,y的地址和b的地址不⼀样,相当于x和y是独⽴的空间,那么在Swap1函数内部交换x和y的值,⾃然不会影响a和b,当Swap1函数调⽤结束后回到main函数,a和b的没法交换。Swap1函数在使⽤的时候,是把变量本⾝直接传递给了函数,这种调⽤函数的⽅式我们之前在函数的时候就知道了,这种叫。b的地址0x000000a0af0ffb24,在调⽤Swap1函数时,将a和b传递给了Swap1函数,在Swap1函数内部创建了形参x和y接收a和b的值,但是x的地址是0x000000a0af0ffae0,

2023-09-07 22:51:44 97 4

原创 C语言指针基础(一)

就使用到了解引用操作符 ,*pa 是通过pa中的地址,找到指向的空间,从而将a的值改为0。在计算机CPU在处理数据时,需要的数据时在内存中读取的,处理后的数据还会放回内存中。这里pa 的左边是(int *), ‘ * ’说明 pa是指针变量, int 是在说明pa指向的是整形类型(int)的对象。每个单元内存单元都会有编号,这个编号就相当于宿舍的房间号,有了这个编号就可以使CPU快速的找到对应的内存空间。C语言中也是一样,我们拿到了地址,就能通过地址(指针)找到地址(指针)指向的对象。

2023-08-29 19:24:39 133 1

原创 VS编译器实用技巧

本文主要分享一些VS(Visual Studio)的使用技巧!!!!

2023-08-21 19:24:40 242

原创 C语言分支循环语句

C语言是结构化的程序设计语言,这里的结构是只顺序结构,选择结构,循环结构。在C语言中能够实现这三种结构的,if、switch实现选择结构,for、while、 do while实现循环结构。

2023-07-30 10:31:35 80 1

原创 C语言中printf

输出文本,里面%d就是占位符,表示这个位置的可以由其他的值来替换。占位符的首位字符一律为%百分号,第二位的字母表示占位符的类型。printf()的基本用法是将输入的文本输出是屏幕上,printf——由print 和 f(format)组成,f表示输出文本的格式。如果想要输出开头部分,可以使用%.[m]s指定输出的长度,其中" m "表示输出的长度。printf()中参数与占位符的关系是一一对应的,如果有 n 个占位符, printf() 的参数就应该有 n +在输出文本中可以有多个占位符。

2023-07-26 15:12:25 271

空空如也

空空如也

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

TA关注的人

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