- 博客(22)
- 收藏
- 关注
原创 Day1 时间复杂度
时间复杂度反映算法运行时间随输入规模增长的趋势,不同复杂度的增长速度从低到高时间复杂度是评估算法效率的核心指标。在 C++ 中,通过分析循环嵌套、递归深度或操作次数,可以确定算法的时间复杂度。实际编码时,应优先选择低时间复杂度的算法(如 O (nlogn) 优于 O (n²)),并利用哈希表、排序 + 二分等优化手段降低复杂度。同时,结合数据结构的特性(如的 O (1) 查找),可以显著提升程序性能。
2025-05-13 20:56:26
911
原创 C++哈希表
C++ 中的哈希表(Hash Table)是一种通过实现高效数据存储与查找的数据结构,其核心思想是将数据的键(Key)通过哈希函数映射到一个固定范围的索引(哈希值),从而直接定位数据的存储位置,实现平均时间复杂度的插入、查找和删除操作。哈希函数是哈希表的核心工具,它的作用是将任意类型的键(Key)转换为一个,通常是一个size_t类型的无符号整数。理想情况下,不同的键应映射到不同的哈希值,但实际中可能存在(不同键生成相同哈希值)。当两个不同的键通过哈希函数生成相同的哈希值时,就会发生。C++ 哈希表(如。
2025-05-12 16:11:19
763
原创 图(邻接矩阵和邻接表)
/邻接矩阵类的定义#define inf -1 //定义无效值private://顶点数量//二维指针数组,用来存储边的信息public://构造函数,传入顶点个数~Graph();//析构函数//加边//打印图的邻接矩阵首先定义无效值,表示两点之间没有边相连。邻接矩阵类包含成员属性:顶点数量和存储边信息的二维指针数组 以及 各个成员函数。//邻接表类的定义private:struct EdgeNode { //边结点结构体int vertex;//边指向的顶点。
2025-05-10 16:45:29
550
原创 二叉搜索树
/二叉搜索树结点定义T data;//数据域//左子结点//右子结点TreeNode() : data(0), left(nullptr), right(nullptr) {} //默认构造TreeNode(T d) : data(d), left(nullptr), right(nullptr) {} //有参构造结点包含数据域、左右子结点指针以及构造函数。//二叉搜索树类定义private://根结点//插入结点(内部调用)//删除结点(内部调用)//查找结点(内部调用)
2025-05-09 17:39:18
635
原创 C++ 二叉树
是一种,其每个节点最多有两个子节点,分别称为和。1)二叉树每个结点最多两棵子树,即每个结点的孩子结点个数为0、1、2。2)左右子树的顺序不可颠倒。3)左右子树严格区分,即使某结点只有一棵子树,也要明确它是左子树还是右子树。二叉树的性质:1)二叉树第 i (i >= 1) 层上最多有 2^(i-1) 个结点;2)深度为 h 的二叉树最多有 2^h - 1 个结点;3)n 个结点的完全二叉树深度为其中 [ ] 表示向下取整。
2025-04-28 21:26:19
703
原创 C++ 树
/链表结点的定义T data;//链表结点数据域,用来存储树结点//指针域,用来指向下一个孩子结点首先我们要定义链表结点用来存放每个树节点的孩子结点。数据域data存储树节点,指针域next指向下一个孩子结点。//树结点的定义T data;//树结点数据域//孩子链表头结点void AddChild(TreeNode<T>* node) { //加边(增加孩子结点)函数//为新的孩子结点申请内存。
2025-04-27 10:13:29
726
原创 C++字符串
在 C++ 里,串(字符串)是一种非常关键的数据结构,用于存储和操作字符序列。C++ 提供了两种主要方式来处理字符串:C 风格字符串和std::string类。下面用类来实现串这个数据结构。
2025-04-22 12:00:00
338
原创 C++队列(顺序表、链表实现)
队列是C++的一个重要数据结构,它遵循原则,就像现实生活中排队一样,队首的人一个一个通过,新进队的人要排到最后面等待。下面分别基于顺序表和链表来实现队列模板。
2025-04-21 15:56:39
748
原创 C++栈(顺序表、链表实现)
在数据结构领域中,栈可类比为一摞整齐堆叠的物品,例如一摞盘子。以餐厅后厨摆放的一摞盘子为例,往这摞盘子里添加新盘子或从中拿走盘子,都只能在最上方进行操作。栈的数据操作方式与之相似,数据的插入操作(即入栈)和删除操作(即出栈)均只能在一端进行,这一端被称为栈顶。假设有一组数字需要存入栈中,这些数字只能依次从栈顶逐个存入。而当需要取出数字时,同样也只能从栈顶开始。先存入栈中的数字会被后续存入的数字压在下方,必须等上方的数字全部取出后,下方的数字才能被取出。这体现了栈 “后进先出。
2025-04-07 12:00:00
391
原创 C++单向链表
/链表结构体T data;//结点存储的数据//指向后继结点的地址//链表private://链表头结点int size;//链表的长度public:List();//构造函数~List();//析构函数//获取链表长度//判空//头插//尾插//在索引处插入//头删//尾删//删除索引处元素//获取索引处的结点//查找结点//更新结点首先定义链表结点的结构体,包含数据域和指针域。
2025-04-06 20:01:20
775
原创 4 泛型编程
函数模板是能处理多种类型参数的通用函数。//函数体引入关键字template和typename来定义模板,其中T 是模板变量的类型名,它可以起任意名字。下面我定义一个两数求和的模板函数并调用它。//自动类型推导//显式指定类型return 0;这里引出两种模板函数的调用,第一种是自动类型推导,编译器会根据你传入的参数类型来判断模板参数的类型,第二种示例显式指定类型,即用尖括号<>包裹类型名,相当于跟编译器提前声明了模板函数的参数类型。将类的某些成员类型变为模板类型,那么这个类就变成了模板类。
2025-04-01 19:56:11
823
原创 2.6 内存管理 结构体 联合体 引用
在C++中,结构体(struct)是用户自定义的复合数据类型,用于封装多个相关数据成员。先讲解其定义和使用。//定义了一个名为Lunch的结构体//结构体数据成员//主食//配菜int cost;//花费//创建结构体变量todayLunch.stapleFood = "米饭";//为数据成员赋值todayLunch.sideDish = "牛肉";//利用结构体输出内容。
2025-03-27 21:12:03
777
原创 2.5 指针
在C++中,指针是一种存储内存地址的变量,是C++内存管理和高级编程的核心。指针的定义格式:类型* 指针变量名 (*表示指针)访问指针指向的地址上存储的值可以用 * 访问,这个操作被称为解引用。指针的类型必须要与指向的数据类型一致。
2025-03-26 10:03:27
816
原创 2.4 数组 函数
在C++中,函数是执行特定任务的独立代码块,用于提高代码的复用性、模块化和可维护性。格式为:返回值类型 函数名(参数列表) {//函数体 (执行的操作)return 返回值;//当返回值类型为void(即无返回类型)时省略返回值类型:函数执行后返回的数据类型(如int、char)。函数名:遵循标识符命名规则,标识函数。参数列表:输入的参数(可以为空),格式为 类型 变量名,如 int a, int b。函数体:包含具体的执行语句。示例:实现两数相乘//返回结果。
2025-03-25 09:44:47
991
原创 2.3 选择、循环语句
if是选择控制语句的一种,当if 中的条件表达式结果为真的时候就执行if 大括号中的代码块,结果为假的时候就跳过。if - else 语句可以让条件为假的时候执行另一个代码块。else 不能单独存在,它必须和前面的if 组合。要注意,程序从上往下依次判断条件,当某个条件为真时,执行对应的代码块,然后其余的分支将不再执行。条件表达式conditon要用括号括起来,代码块可以是单条语句,也可以是多条用大括号扩起来的语句。
2025-03-24 12:56:29
951
原创 2.1 输入输出 数据类型
这一节我先给出一个简单的C++代码,这是我们的第一个C++程序现在我来一一介绍这里的东西,首先第一行代码中的 #include 指令是将后面的 iostream 文件的内容添加到程序中,这是一种典型的预处理操作--源代码被编译之前,替换或添加文本。有关预处理已经在上一节介绍过了。iostream 文件表示输入输出流头文件,i 表示 input 输入,o 表示 output 输出,stream 自然就是 水流、流的意思。
2025-03-22 22:16:38
905
原创 1.1 初识C++
只适合C++初学者看。我是一名正在学习C++的大学生,写文章一方面是想分享我学的东西,另一方面是在写的过程中加深我对这些知识的理解。如果文章中有任何地方有误,欢迎指正!
2025-03-20 22:07:43
158
原创 C语言getchar()笔记
上面用户输入了一个中间带有空格的密码,由于 scanf 读取到空格处便停下了,所以此时缓冲区里有空格、nahida、\n 这些字符,接下来的while 循环将使用getchar一个一个读取缓冲区里的字符并赋值给变量waste,直到赋值到 \n 时停止循环并进行接下来的操作,在最后打印password,可以看到只有’loveayaka‘。:在程序中,getchar()通常用于读取用户的输入。还有一个方法是用 fflush() 函数来清除缓冲区中的回车符(本人还没学到相应的知识,就不介绍了,嘿嘿)。
2024-10-02 22:48:08
672
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅