C++
hurricane&&storming
Not being impetuous
展开
-
一张图让你学习 C++ 少走弯路
原创 2021-03-06 19:15:45 · 176 阅读 · 0 评论 -
二分排序法
二分排序法运行结果:思想:1, 逐渐扩大排好序区间,用待排元素插入到排好序的序列中2,查找待插入位置时用二分查找法#include<iostream>// 折半插入排序void binarySort(int a[], int n) { int i, j, low, mid, high; for (i = 2; i < n; ++i) { a[0] = a[i]; // 待排元素,a[0]用来存储每次待排的元素,不参与整体排序 low = 1; hi原创 2021-12-20 01:36:58 · 423 阅读 · 0 评论 -
用前序和中序遍历序列构造二叉树
用前序和中序遍历序列构造二叉树生成如下图这样一棵树,简单容易想遍历序列它的先序:1 2 4 3它的中序:4 2 1 3它的后序:4 2 3 1构造思想:先序第一个元素即为根结点的值 1,在中序中找到 1,由 1 将中序序列分成两个子序列,左边子序列构成左子树,右边子序列构成右子树,再对左、右两个子序列用同样的方法处理,知道所处理的子序列只剩下一个元素时二叉树构造结束。运行结果:源码#include<iostream>// 二叉链表存储树typedef原创 2021-12-09 01:35:46 · 706 阅读 · 0 评论 -
图(邻接矩阵、表)的创建(怎么生成)过程,然后学会遍历,掌握这两个基本操作,才能更好地深究图后面的算法那.
知道图的创建过程、然后学会遍历,掌握这两个基本操作,才能更好地深究有关图后面的算法那首先要明白他们的基本思想创建图(如果是邻接矩阵表示,比较容易,直接定义一个二维数组就行了)创建邻接表(图)的基本思想:确定顶点数和边数初始化每个顶点的位置(也就是每个顶点在邻接表中的位置)连接有边的顶点(无向图双向连接,有向图只连单边),并赋予权值深度优先搜索的基本思想:任取一个顶点,访问之,然后检查这个顶点的所有邻接顶点,递归访问其中未被访问过的顶点广度优先搜索的基本思想:任取图中一原创 2021-11-04 19:26:57 · 575 阅读 · 0 评论 -
【宝藏】二叉树的非递归遍历 | 先序 | 中序 | 后序 | 层次
二叉树的非递归遍历运行结果(采用二叉排序法构建二叉树):代码如下:#include<iostream>// 定义二叉树结点类型,以二叉链表作为存储二叉树的数据结构typedef struct BTNode { int data; struct BTNode* lchild; struct BTNode* rchild; // 默认构造 BTNode() :data(0), lchild(0), rchild(0) {} // 带参构造函数 BTNode(int原创 2021-09-24 01:02:33 · 176 阅读 · 0 评论 -
【考题】合并两个有序表为一个有序表
合并两个有序表为一个有序表合并后为一个有序表思路都在代码注释里了。#include<iostream>// merge 归并,将两个有序表 a[], b[] 合并为一个有序表int* temp = new int[20](); // 动态开辟一个大小为 20 的空间并初始化这 20 个单元值为 0int* merge(int a[], int b[], int m, int n) { size_t i = 0, j = 0, k = 0; // 下面会用到的数组变量原创 2021-09-20 20:34:18 · 907 阅读 · 0 评论 -
【宝藏归并排序算法代码】归并排序算法 | 详细实现
归并排序算法想写的都放在代码注释里了#include<iostream>int* p = new int[20](); // 动态开辟一个大小为 20 的空间并初始化这 20 个单元值为 0 // A[] 表示 [low...mid] and [mid + 1...high] 都是有序的void merge(int A[], int low, int mid, int high) { // 将两片各自有序的表合并为一个有序表 size_t i = 0, j = 0, k原创 2021-09-20 20:19:17 · 128 阅读 · 0 评论 -
二叉树 | 前、中、后序递归遍历及层次遍历
二叉树的前、中、后序递归遍历及层次遍历运行结果二叉树采用二叉排序树生成法,所以中序输出递增序列想描述的都在代码里了,这些都比较简单,直接看代码里的注释吧。#include<iostream>// 定义二叉树结点类型,以二叉链表作为存储二叉树的数据结构typedef struct BTNode { int data; struct BTNode* lchild; struct BTNode* rchild; // 默认构造 BTNode() :data(0),原创 2021-09-19 23:19:38 · 233 阅读 · 0 评论 -
【宝藏】一篇博客代码 + 注释让你搞懂线索二叉树
线索二叉树一. 线索二叉树的创建、遍历二. 前、后序递归线索化二叉树(补充)一. 线索二叉树的创建、遍历运行结果代码如下,注释为王#include<iostream>// 线索二叉树结点定义typedef struct TBTNode { int data; // 值域 int ltag, rtag; // 左右线索标记 struct TBTNode* lchild; // 左指针 struct TBTNode* rchild; // 右指针 // 默认构原创 2021-09-19 21:54:01 · 170 阅读 · 0 评论 -
二叉排序(搜索)树 | BST | 插入 | 创建 | 查找 | 遍历
二叉排序(搜索)树 | BST | 插入 | 创建 | 查找 | 遍历运行结果注释为王,请看代码:#include<iostream>// 定义二叉树结点类型,以二叉链表作为存储二叉树的数据结构typedef struct BTNode { int data; struct BTNode* lchild; struct BTNode* rchild; // 默认构造 BTNode() :data(0), lchild(0), rchild(0) {} // 带参原创 2021-09-19 16:47:00 · 165 阅读 · 0 评论 -
C++ | 快速排序
C++ 快速排序通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。代码详情#include<iostream>// 对数组从下标 low 到 high 进行排序void Qsort(int a[], int low, int high) { if (low >= high) return; int temp = 0;原创 2021-09-18 20:27:16 · 126 阅读 · 0 评论 -
kmp 算法的一种代码实现
kmp 算法的一种代码实现本文档仅提供代码实现(刚好 100 行),有注释,但由于 kmp 算法理解的困难性,深入理解还需参考一些其他资料。#include<iostream>//简单匹配size_t index(std::string&, std::string&);// next[]void get_next(std::string&, int next[]);// 优化后 nextval[]void get_nextval(std::st原创 2021-09-05 16:55:55 · 204 阅读 · 0 评论 -
矩阵之转置、加、减、乘
矩阵之转置、加、减、乘结果:打印原始数组:[[1 2 3 ][4 5 6 ][7 8 9 ][3 4 5 ]]转置后:[[1 4 7 3 ][2 5 8 4 ][3 6 9 5 ]]d:[[1 2 3 ][4 5 6 ]]e:[[1 2 3 ][4 5 6 ]]d e 相加:[[2 4 6 ][8 10 12 ]]d e 相减:[[0 0 0 ][0 0 0 ]]g:[[1 2 ][4 5 ]]h:[[1 2 3原创 2021-07-26 23:31:11 · 2131 阅读 · 0 评论 -
(灵魂面试题)C++ 设计不被继承的类
C++ 设计不被继承的类我们知道,使用关键字 final 可以实现禁用继承、禁用重载。现在将用一种更特别的方式设计一个不被继承的类 B关键:一个类能否被继承取决于构造函数实现。template <typename T> class A{ friend T;private: A() {} ~A() {}};class B : virtual public A<B>{public: B() {} ~B() {}};class C : virt原创 2021-07-22 17:22:03 · 116 阅读 · 0 评论 -
(面试考题)访问基类的私有虚函数,深入理解虚函数和多态
访问基类的私有虚函数运行结果:B::gA::fB::h望读到的大佬分析一下 main() 函数里的代码什么意思呀#include <iostream>using namespace std;class A{ virtual void g() { cout << "A::g" << endl; }private: virtual void f() { cout << "A::f" << endl; }原创 2021-07-22 16:51:39 · 921 阅读 · 0 评论 -
(面试常考数据结构灵活应用)用两个栈实现一个入队功能
用两个栈实现一个入队功能// 定义结点typedef struct node{ int data; node* next;}node, * LinkStack;// 创建空栈LinkStack CreateNULLStack(LinkStack& S){ // S = (LinkStack)malloc(sizeof(node)); // 申请新结点 S = new node(); if (NULL == S) { printf("Fail to malloc a n原创 2021-07-22 16:27:51 · 109 阅读 · 0 评论 -
Summary of study notes(github)学习记录分享
xdm,我把学到的东西都汇总到 github 上呢,并且会持续更新背后的链接呢 ❥(^_-)github 地址一起学习,一起进步,冲啊!!!原创 2021-06-30 20:57:03 · 93 阅读 · 0 评论 -
C++ 中浮点数精度丢失问题
必知概念浮点数由阶码和尾数两部分组成。E 为阶码,M 为尾数。浮点数默认保存为 double 类型,就像整数默认为 int 型一样。float 的十进制精度为 7 位。double 的十进制精度为 16 位。所以浮点数在计算机中存储时,可能出现 精度丢失 问题。所以编程时一般都用 double 而不用 float,以免造成难以发现的 bug。下面来看编译结果及代码(浮点数规格化就是对非规格化浮点数进行的处理,包括溢出处理)源码:#include<iostream.原创 2021-06-16 12:33:26 · 4092 阅读 · 0 评论 -
C++ 对文件的最常用基操之对 ASCII 文件(文本文件、字符文件)的操作
C++ 对文件的最常用操作☆ 基本概念根据文件中数据的组织方式,可以将文件分为 ASCII 文件 和 二进制文件。前者又称为文本文件或字符文件,后者又称为内部格式文件或字节文件。本文讲解针对 ASCII 文件的基操,具体内容详见代码。#include<fstream>#include<string>#include <iostream>/* ifstream 类,从 istream 类派生。用来支持从磁盘文件输入。 ofstream原创 2021-06-11 00:08:47 · 2256 阅读 · 2 评论 -
一个程序带你搞懂局部,结构体中的变量在内存中的存放逻辑
变量(局部,结构体中)的物理存放一键摸索首先了解概念变量按声明顺序在内存中顺序存放。不用对齐存放。而在结构体中声明的变量都是向 size 最大对齐存放。普通变量存放在栈中,为连续区域。然后看图源代码#include<iostream>#include<string>struct MyStruct{ int a; std::string b; char c; double d; MyStruct(int _a, char _c, do原创 2021-06-05 23:46:57 · 604 阅读 · 0 评论 -
主要是为了 栈和队列的应用 熟悉这两种数据结构 才写了个小程序(C++ 小小米计算器)
小小米计算器我始终觉得,写程序,注释为王在追求代码质量的路上我希望越做越好,代码越简单,程序越稳定,bug 也就更不容易出现试运行 .exe 文件 → counter她的结构然后他运行后的主要界面,有两种模式模式 1模式 2接下来还得看源程序咯,就这 “破” 玩意儿,我调了好几晚,最后妥协做了个只能进行一位四则运算的迷你计算器。主函数/** * 作者 :hurricane&&storming** 日期 :2021.5.28**/#incl原创 2021-05-28 23:13:47 · 195 阅读 · 0 评论 -
顺序表逆置问题,包括全逆置、区间逆置、最前(后)逆置和用逆置实现循环移位
线性表逆置逆置问题无非就是选取某些元素交换本文先考虑全逆置和区间逆置然后引出最前面和最后面逆置最后用前面的思路求解循环移动问题原创 2021-05-14 10:22:06 · 294 阅读 · 0 评论 -
C++ 实现电话薄(链表头插法实现添加联系人),简单地描写,主要是注重代码质量,看懂后可以很容易在上面添加其他功能并便于维护
C++ 实现电话薄(链表头插法实现添加联系人)主要实现了四个函数。原创 2021-04-28 19:26:39 · 796 阅读 · 0 评论 -
常用高阶排序算法总结(归并、快速、希尔排序)
一、归并排序归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。时间复杂度: O(nlogn)空间复杂度:O(n)稳定二、快速排序它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此原创 2021-03-24 17:29:16 · 410 阅读 · 0 评论 -
常用中阶排序算法总结(桶、基数、堆排序)
文章导航一、桶排序二、基数排序三、堆排序一、桶排序桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。#include<iterator>#include<iostre原创 2021-03-24 17:04:46 · 227 阅读 · 0 评论 -
常用简单排序算法总结(冒泡、插入、选择排序)
文章导航一、冒泡排序二、一、冒泡排序void bubblesort(const int a[], const int& n){ bool sorted = false; // 整体排序标志,这是本算法的有力手段 while(!sorted){ sorted = true; // 假定已经排序 for(int i = 1; i < n; ++i){ // 自左向右逐对检查当前范围 a[0, n)内的各相邻元素 if(a[i - 1] > a[i]){ // 逆序原创 2021-03-24 16:48:18 · 424 阅读 · 1 评论 -
C++ string and string_view(这篇教你怎么用)
C++ string导航专用string(不可变字符串)string 变量定义string 输入输出string 求长度string c++ 转化为 c 风格字符串string 访问单个字符string 字符串拼接string 插入string 删除string 提取子字符串string 查找子串string → string_view(可变字符串)string_view 声明及定义string_view 长度string_view 修改字符串string_view 的其他行为string(不可变字符串原创 2021-01-06 21:10:40 · 8742 阅读 · 7 评论