笔记
吃橘子aaaaa
这个作者很懒,什么都没留下…
展开
-
高级数据结构:最小生成树及普里姆算法
最小生成树及普里姆算法的代码实现原创 2022-08-13 15:04:42 · 725 阅读 · 1 评论 -
高级数据结构:赫夫曼树
赫夫曼树编码原创 2022-07-30 14:42:04 · 369 阅读 · 0 评论 -
用非递归的方法实现二叉树中的层遍历,先序遍历,中序遍历和后序遍历
用栈实现二叉树中的层遍历,先序遍历,中序遍历和后序遍历原创 2022-07-28 12:11:56 · 348 阅读 · 0 评论 -
高级数据结构:用递归方法遍历二叉树的高度,树节点的个数以及遍历二叉树的三种方式
在代码中描述了如何遍历二叉树的高度,树节点的个数以及遍历二叉树的三种方式原创 2022-07-23 13:26:14 · 408 阅读 · 0 评论 -
C++:继承和派生
继承和派生 以及面试常考点原创 2022-07-08 11:29:56 · 835 阅读 · 0 评论 -
C++:继承和派生
派生类与基类原创 2022-07-07 16:55:58 · 343 阅读 · 0 评论 -
Linux:线程安全,多线程的应用
如何保证线程安全:同步和添加线程安全函数多线程的应用原创 2022-06-30 15:35:01 · 351 阅读 · 0 评论 -
友元,静态关键字,静态方法以及对象间的关系
友元,静态关键字,静态属性,静态方法,对象间的关系原创 2022-06-28 14:08:05 · 217 阅读 · 0 评论 -
Linux基础:读写锁,互斥锁及条件变量
信号量,互斥锁,读写锁和条件变量原创 2022-06-26 21:19:41 · 225 阅读 · 0 评论 -
实现字符串MyString
实现字符串的各种功能原创 2022-06-26 10:49:25 · 532 阅读 · 0 评论 -
运算符重载和深赋值
运算符的重载相关代码原创 2022-06-17 10:25:46 · 159 阅读 · 0 评论 -
Linux基础:多线程
多线程相关问题以及处理方法原创 2022-06-12 22:36:14 · 379 阅读 · 1 评论 -
Linux基础:共享内存和消息队列
共享内存和消息队列原创 2022-06-09 11:45:23 · 308 阅读 · 0 评论 -
Linux基础:信号量
信号量原创 2022-06-04 21:06:54 · 618 阅读 · 0 评论 -
Linux基础:有名管道和无名管道
有名管道和无名管道,代码实现,面试常问试题原创 2022-06-01 13:15:08 · 4664 阅读 · 0 评论 -
C++:拷贝构造函数,深拷贝,浅拷贝以及运算符的重载
用一个对象构造另一个对象,调用拷贝构造函数无论在什么函数(拷贝构造,析构函数,......)中,绝对禁止使用memmove深拷贝和浅拷贝: MyString(const MyString& sx) :str(sx.str)//浅拷贝 { } MyString(const MyString& sx) :str(nullptr)//深拷贝 { int n = strlen(sx.str) + 1; str = new char[n]; strcp原创 2022-05-31 14:34:05 · 461 阅读 · 0 评论 -
Linux基础:模拟实现bash及其一系列功能
命令解释器:模拟实现bash第一类内置命令:cd(改变当前工作路径,默认回到家目录) exit 不用通过子进程来完成,在mybash中直接调用函数来实现第二类普通命令:pwd ps(打印PID) ls(当前目录下的文件) cp 通过子进程实现,用命令fork+exec......原创 2022-05-30 16:44:24 · 356 阅读 · 0 评论 -
C++:日历系统
分析:视觉对象:显示数据(菜单,日期)模式对象:对数据进行处理控制端对象:来控制视图和模式(关联模式对象,关联视图对象),通知视图进行数据显示。具体代码如下:第一步:先写三个对象的头文件头文件ModelDate.h#ifndef MODELDATE_H#define MODELDATE_H//模式端,对数据进行操纵class ViewDate;class ModelDate{private: ViewDate* pview;private: int year;原创 2022-05-29 20:43:51 · 964 阅读 · 0 评论 -
C++:实现整型栈
栈的特点:先进后出,下面展现了其实现过程,具体代码如下:#include<iostream>#include<assert.h>using namespace std;enum { STACK_INIT_SIZE = 10, STACK_INC_SIZE = 2 };//给定初始容量为10,且按照2倍的增量来扩容class MyStack {/*private: int _capc; int _top; int* _data; //heappublic:.原创 2022-05-29 14:25:52 · 295 阅读 · 0 评论 -
c++:对象成员方法的使用
类的成员方法的设计:初始化时候尽量用参数列表进行初始化。Complex(int r=0,int i=0) :Real(r),Image(i){}常对象只能调用常方法,而不能调用不同方法;普通对象既可以调用普通方法(优先选择),也可以调用常方法。普遍方法与const成员函数:...原创 2022-05-27 13:14:05 · 195 阅读 · 0 评论 -
C++基础:对象的生存期,关键字new、delete与库函数malloc、free的区别
1.局部变量:对于局部定义的对象,每当程序控制流到达该对象定义处时,调用构造函数。当程序控制走出该局部域时,则调用析构函数。对于静态局部定义的对象,在程序控制首次达到该对象定义处时,调用构造函数。当整个程序结束时,调用析构函数 实例:局部对象#include<iostream>using namespace std;class Complex{ double Real;//实部 double Image;//虚部public: Complex() :...原创 2022-05-26 17:47:54 · 363 阅读 · 0 评论 -
C++基础:构造函数与析构函数
数据成员多为私有的,要对他们进行初始化,必须用一个公有函数来进行。同时这个函数应该在定义对象时自动执行一次。称为构造函数。构造函数的用途:1)创建对象;2)初始化对象中的属性;3)类型转换构造函数的定义与使用: 构造函数是特殊的公有成员函数(在特殊用途中构造函数的访问限定可以定义成私有或者保护)。其特征如下:1.函数名与类型名相同。2.构造函数无函数返回类型说明。注意是没有而不是void,即什么也不写,也不可以写成void。实际上构造函数有返回值,返回的就是构造函数所创建的对象...原创 2022-05-26 15:32:37 · 2742 阅读 · 0 评论 -
Linux基础:信号的定义,处理方式,修改信号的响应方式,向指定的进程发送指定的信号以及僵死进程和处理方法
1.信号的定义及处理方式:信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作(通知进程产生了某个事件),由其他进程或者内核发送信号,当收到一个信号,按照3种处理方式(响应):1.默认 2.忽略 3. 自定义通过signal()来改变信号的响应方式;通过kill()发送信号。把可能发生的事件全部进行了编号(每一个信号都有一个编号:如2号信号,键盘按下Ctrl+c时,就会产生该信号;9号信号是按默认的响应方式,其响应方式不允许改变;17号信号,子进程结束以后,会默认给父进程发送该信号原创 2022-05-25 13:27:07 · 481 阅读 · 0 评论 -
使用递归方法实现链表反转
递归使用递归函数,一直递归到链表的最后一个结点,该结点就是反转后的头结点,记作 ans 此后,每次函数在返回的过程中,让当前结点的下一个结点的 next 指针指向当前节点。 同时让当前结点的 next 指针指向NULL ,从而实现从链表尾部开始的局部反转 当递归函数全部出栈后,链表反转完成。 class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL||pH原创 2022-05-24 15:45:30 · 943 阅读 · 0 评论 -
单链表从尾到头打印的四种方法
一、单链表从尾到头打印的四种方法。1、正常从尾到头打印。用一个尾指针指到最后,尾指针每次前移移位,遇到尾指针则打印。void EndToFirstPrintNode(SListNode*ps) //正常从尾到头打印{ SListNode *cur=ps; SListNode *tail=NULL; while (ps != tail) { cur=ps; while (tail != cur->_next) ...原创 2022-05-24 15:29:03 · 1900 阅读 · 0 评论 -
C++基础:this指针的概念,操作及特点
编译器针对程序员自己设计的类型分三次编译。第一:识别和记录类体中属性的名称,类型和访问限定,与属性在类体中的位置无关。如:class CGoods中的Name,Amount,Price,Total_value;第二:识别和记录类体中的函数原型(返回类型+函数名+参数列表),形参的默认值,访问限定。不识别体函数。第三:改写在类中定义的参数列表和函数体,改写对象调用成员函数的形式。示例:#include<iostream>using namespace std;clas原创 2022-05-24 13:37:15 · 1837 阅读 · 0 评论 -
C++基础:面向对象编程
1. 面向过程:当软件规模超过一定的尺度后,采用结构化程序设计,其开发和维护就越来越难空值。其根本原因就在于面向过程的结构化程序设计的方法与现实世界往往不一致,结构化程序的思想往往很难贯彻到底。在结构化设计中,往往采用的是“自顶向下,逐步细化”的思想。具体操作方法是模块化,是按照功能来分的,所以也称为功能块(函数)。在c++中称为一个函数,一个函数解决一个问题,即实现一个功能或一个操作。在模块化的思想中已经出现了封装的概念,这个封装是将数据封装到模块中,即局部变量。电脑这是很不彻底的,因为模块是原创 2022-05-23 16:41:51 · 1309 阅读 · 0 评论 -
练习题:日历
#include<iostream>#include<iomanip>using namespace std;//先判断是平年还是闰年int Yyear(int year){ if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 366; } else { return 365; }}//根据...原创 2022-05-22 20:53:42 · 144 阅读 · 0 评论 -
C++基础:typedef与using,string的使用
1.typedef与usingtypedef定义的是类型别名,所有使用别名的地方都等价于使用类型,也会进行语法检查。函数指针: typedef void (*f) (int, const std::string&); f func = 函数地址;数组的引用: typedef int(&Arr)[10]; int a[10]; Arr arr=a;using...原创 2022-05-24 00:00:00 · 396 阅读 · 0 评论 -
C++基础:关键字decltype ,基于范围的for循环
1.关键字decltypeauto所修饰的变量必须被初始化,编译器需要通过初始化来确定auto所表达的类型,即必须要定义变量。若仅希望得到类型,而不需要定义变量的时候应该怎么做呢?c++11新增了decltype关键字,用来在编译时推导出一个表达式的类型。语法如下:decltype(exp)其中,exp为表达式。从格式来看,decltype很像sizeof----用来推导表达式类型大小的操作符。类似于sizeof,decltype的推导过程是在编译期完成的,并且不会真正计算表达式的值。原创 2022-05-22 16:11:06 · 221 阅读 · 0 评论 -
C++基础:关键字auto
1.类型推到C++引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能方便获取复杂的类型,而且还能简化书写,提高编码效率C11中auto成为类型指示符 auto类型推导:auto定义的变量,可以根据初始化的值,在编译时推导出变量名的类型。如:2. auto的推导规则从上面的示例中可以看到auto的一些使用方法。它可以同指针、引用结合起来使用,还可以带上cv限定符((修饰词),const和volatil限定符的统称)。由上面的例子可以看出: ...原创 2022-05-21 11:26:10 · 7151 阅读 · 0 评论 -
C++基础:运算法new和delete的使用
可执行程序(进程)的虚拟地址空间:内核:操作系统栈区:函数的形参,非静态的局部变量,函数现场保护数据等等,栈是向下增长的。共享库的内存映射区域:用于装载一个共享的动态内存库,用户可使用系统接口创建共享内存,作进程间通信。堆区:用于程序运行时动态内存分配,堆是可以向上增长的数据段:存储全局数据和静态数据,分为.bass和.data代码段:可执行的程序(机器指令)和常量数据C的动态内存管理:C++的动态内存管理:1.new运算符的使用2. new的函数方式..原创 2022-05-19 20:40:11 · 703 阅读 · 0 评论 -
Linux基础:进程替换 exec系列以及从堆区申请内存的相关问题
从堆区malloc申请1G内存能否成功?1.物理内存剩余空间大于1G,能成功;2.物理内存剩余空间不足1G,但加上虚拟内存剩余空间,大于1G,那么也能成功。虚拟内存提供的三个重要的能力: 1) 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区 域,根据需要在磁盘和主存之间来回传送数据,使得能够运行比内存大的多的进程。 2) 它为每个进程提供了一致的地址空间,从而简化了存储器管理 3) 它保护每个进程的地址空间不被其他进程破坏...原创 2022-05-18 17:32:56 · 162 阅读 · 0 评论 -
C++基础:函数模板
为了代码重用,代码必须是通用的;通用的代码就必须不受数据类型的限制。那么我们可以把数据类型改为一个设计参数,这种类型的程序设计称为参数化程序设计,软件模板有模板构造,包括函数模板和类模板。函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,简化重载函数的设计,函数模板的定义如下:template<模板参数表>返回类型 函数名 (形式参数表){ .......;//函数体}<模板参数表>尖括号中不能为空,参数可以有多个,用逗号...原创 2022-05-17 13:24:39 · 165 阅读 · 0 评论 -
C++基础:函数重载
概念:在C++中可以为两个或者两个以上的函数提供相同的函数名称,只是参数类型不同,或者参数类型相同而参数个数不同,称为函数重载。当一个函数名在同一个域中被声明多次时,编译器按照如下步骤解释第二个(以及后续的)声明。如果两个函数的参数表中参数的个数或类型或顺序不同,则认为这两个函数是重载。例如:void print(int a,char b);void print(char a,int b);判断函数重载的规则:1.如果两个函数的参数表相同,但是返回类型不同,会被标记为编译错误原创 2022-05-15 20:16:20 · 202 阅读 · 0 评论 -
C++基础:inline函数
1.inline 函数1.1定义:inline 函数由 inline 关键字定义,引入 inline 函数的主要原因是用它替代 C 中复杂易错不易维护的宏函数。1.2编译器对 inline 函数的处理办法 编译器在编译阶段完成对 inline 函数的处理,即对 inline 函数的调用替换为函数的本体。但 inline 关键字对编译器只是一种建议,编译器可以这样去做,也可以不去做。从逻辑上来说,编译器对 inline 函数的处理步骤一般如下:(1)将 inline 函数体复制到inline..原创 2022-05-15 00:30:00 · 17057 阅读 · 0 评论 -
Linux : print,fork(复制进程),僵死进程以及处理方法,内存地址的介绍
1.printf 缓冲区1.1如果缓冲区满了,则直接输出1.2 如果缓冲区没有满,则强制刷新输出例如:第一组代码:先打印 hello 再休眠2秒第二组代码:先休眠2秒再答应hello解释:其原因就是缓冲区,在第一个代码中,我们加有 \n 进行对应的换行,强制对缓冲区进行了刷新;第2个程序没有对缓冲区进行刷新所以等待了2秒,遇到程序结束,那将对应的内容打印到屏幕上.2·主函数 3个参数 int main(int argc ,char *argv[],char* e..原创 2022-05-14 11:22:43 · 381 阅读 · 0 评论 -
题目:输入一个数,判断它是不是回文数。一个数从左边读和从右边读的结果是一模一样的话就是回文数,例如12321是回文数,12531不是回文数。
题目:输入一个数,判断它是不是回文数。一个数从左边读和从右边读的结果是一模一样的话就是回文数,例如12321是回文数,12531不是回文数。分析:判断从左边读和右边读,结果是不是一样。#include <stdio.h>int main( ) { int num, x, y = 0; printf("请输入一位数:"); scanf("%d", &num); x = num; while (x > 0) { y =...原创 2022-05-09 17:36:02 · 1102 阅读 · 0 评论 -
c++入门基础:引用的定义,特点等介绍
引用的定义类型& 引用变量名称=变量名称;&和类型结合称之为引用符号,不是取地址符,代表别名的意思。引用的特点const 引用引用作为形参代替指针使用指针交换两个整型值使用引用交换两个整型值 其他引用形式...原创 2022-05-09 17:33:08 · 332 阅读 · 0 评论 -
c++入门基础:const,指针与引用
const 与指针int a = 10, b = 20;int* p1 = &a;*p1 = 100;p1 = &b;const int* p2 = &a;int const* p3 = &a;int* const p4 = &a;const int* const p5 = &a;在上面 const int* p2;与int const* p3= &a;是等价的const在星号的左边,我们的const修饰的是指向能力,也原创 2022-05-09 16:37:00 · 163 阅读 · 0 评论