自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021-02-28

完全二叉树的顺序存储结构 二叉树深度与节点数之间的转换 设二叉树深度和层数都从0开始计数(为了保持c/c++语言下标使用习惯),例如:只有一个根节点的二叉树深度为0,且只有第0层。以此类推,有两层节点的二叉树的深度为1,包含第0层,第1层. . . . . . ,有k+1层节点的二叉树深度为k,包含第0层到第k层。其中,第k层最多含有节点数为2k个。由此,深度为k的二叉树最多含有的节点数为20+21+22+…+2k-1+2k=(i=0~k)∑ 2k=2k+1-1,同理可得,深度为k-1的二叉树最多含有节点数

2021-02-28 16:34:04 95

原创 2021-02-26

C++语言实现链式栈 头文件: #pragma once #include<iostream> #include<exception> using namespace std; template<typename T> struct Node { T data = T(); Node<T>* next = nullptr; }; template<typename T> class LinkStack { public: ~LinkSta

2021-02-26 16:36:04 123

原创 2021-02-26

C++语言实现顺序栈 相较于链式栈,顺序栈的存储容量是固定的,不能灵活分配空间。 头文件: #pragma once #include<iostream> #include<initializer_list> using namespace std; template<typename T> class SeqStack { public: using size_type = int; //--------------------------------------

2021-02-26 16:34:00 61

原创 2021-02-20

C++为什么不能将基类对象地址隐式转换为派生类指针(派生类指针指向基类对象) 派生类继承于基类,因此,派生类的成员变量和成员函数除了继承自其基类以外,可能还有自己独有的成员变量和成员函数。因此,若使用派生类指针指向基类对象:1.当利用派生类指针访问基类对象的成员变量时,派生类指针是把基类对象当作派生类对象来访问的,这样必然出现内存越界访问的问题。2.当使用派生类指针调用派生类独有而基类中不存在的成员函数时,若该成员函数访问了派生类独有而基类没有的成员变量,将出现运行时错误,以为该函数根本无法访问到这个不存在

2021-02-20 22:22:22 69

原创 2021-02-19

C++实现可共享的双向链表 可共享的含义 在linux内核中,有大量的数据结构需要用到双向链表,例如进程、文件、模块、页面等。若采用双向链表的传统实现方式,需要为这些数据结构维护各自的双向链表,并且为每个链表都设计插入、删除等操作函数。 因此,为了实现在同一个项目中不同类型数据用到同一种数据结构来存储,必须将存储数据的载体与数据分离开来。这种独立于具体需存储的数据类型,可供任意数据类型使用的双向链表称为可共享的双向链表。 例如,我们可以定义一个双向链表类型,这个双向链表是一个独立的载体,不与任何其他数据类型

2021-02-19 17:21:45 53

原创 2021-02-18

C++语言实现双向链表 与单向链表区别 双向链表与单向链表唯一的区别是prev指针指向前一个节点,相对于单向链表,双向链表可以访问指定节点的前驱,也可以逆向遍历链表。 算法实现 头文件: #pragma once #include<iostream> using namespace std; using DataType_t = int; typedef struct ListNode { DataType_t data; ListNode* prev; ListNode* next

2021-02-18 11:37:55 100

原创 2021-02-17

C++语言实现链队列 链队列与顺序循环队列的比较: 相较于顺序循环队列,链队列可以自由伸缩,可以按需分配内存,算法也相较于顺序循环队列易于理解。但链队列要定义两个结构体,一个是队列的节点,一个是链队列本身。 算法实现 头文件: #pragma once #include<iostream> using namespace std; using DataType = int; //定义链队列节点类型。 typedef struct LinkNode { DataType data; Lin

2021-02-17 21:32:28 76

原创 2021-02-17

C++语言实现顺序循环列队 区分循环列队满空状态的的三种常用方法: 在列队结构体中设一个标志位,用于标记列队的满空状态。 在列队结构体中设一个计数器用于记录列队的长度。 多为列队数组分配一个存储空间,当执行入队操作时,尾后指针rear后移,当移动至首指针front前一个位置时,让此时rear指向的节点作为尾后节点,就像C风格字符串一样,用一个空的存储空间标记列队的结尾。 算法实现 头文件: #pragma once #include<iostream> using namespace st

2021-02-17 20:08:40 57

原创 2021-02-11

C++语言实现单向循环链表 概述: 单向循环链表的各项操作与单链表大致一致,需要注意的区别是,在单向循环链表的头部插入元素会更改首节点,则需要让尾元素的指针域指向这个新加入的首节点。此外,单向循环链表的结束条件与单链表不同,不是尾元素指针域指向NULL,而是指向首节点。 头文件: #pragma once #define ELEMENT_TYPE int typedef struct ListNode { ELEMENT_TYPE ele; struct ListNode* next; }Node;

2021-02-11 12:35:35 48

原创 2021-02-10

C++语言实现单链表 单链表的优缺点 单链表的优点: 进行插入与删除操作只需要移动一个指针,相比顺序表更加方便快捷。 没有空间限制,可以自由伸缩(只要内存充足),可以按需随时分配内存。 单链表的缺点: 需要占用额外的存储空间用来存放指针。 访问元素需要指针从头开始遍历,访问速度较慢。 算法实现: 头文件: #ifndef _LINK_LIST_H_ #define _LINK_LIST_H_ #define ELEMENT_TYPE int typedef struct ListNode{ E

2021-02-10 21:15:30 59

原创 2021-02-09

C++语言实现顺序表 顺序表优缺点 顺序表的优点: 表中元素在存储地址上具有连续性,可直接通过下标快速获得任意元素地址,实现快速随机访问。 在顺序表尾部插入或删除元素很快。 顺序表的缺点: 对顺序表尾部以外位置执行插入或删除元素操作需要移动操作位置后面的全部元素,速度较慢。 顺序表长度固定,不能灵活伸缩。 使用顺序表的常见错误 在遍历顺序表中的元素时,若中途有擦除或插入元素的操作,注意元素下标的指向会改变。 算法实现 头文件: #ifndef SQLIST_H #define SQLIST_H #

2021-02-09 18:44:08 80

原创 2021-02-07

动态多态性原理及含虚函数的类的对象内存布局剖析 动态多态性指的是什么? 静态多态性通过函数重载实现,即在编译阶段即确定了函数的调用地址。动态多态性又称为运行时多态,是指在程序运行时才确定这次调用哪个类的成员函数。 动态多态性的实现原理? ​ 基类通过将自己的成员函数声明为虚函数,构造一个虚函数表(函数指针数组),所有被声明为虚函数的成员函数的地址都将被存储在虚函数表中,编译器给每一个含有虚函数的类的对象一个指针成员变量用来存储该类对应的虚函数表的地址。当使用基类的指针或引用调用方法时,调用哪个方法不再

2021-02-07 20:23:03 124

原创 2021-02-03

C语言简易文本编辑器 1.功能简介: 1.创建新文件。 2.拷贝文件。 3.删除文件。 4.打开文件。 5.在文件尾部添加一行。 6.删除指定行。 7.在指定位置插入一行。 8.显示指定行。 9.显示用户修改记录。 10.显示总行数。 11.编辑文本。 12.退出程序。 2.源码及注释:` (https://github.com/yuanhui678/C-.git) ...

2021-02-03 15:59:57 54

空空如也

空空如也

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

TA关注的人

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