自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++知识扫盲】-----初识迭代器

迭代器是一种抽象的指针类型,它使得你可以遍历容器中的元素而不需要知道容器的具体实现细节。迭代器可以用来访问容器中的元素、移动位置、比较位置等。

2024-09-14 22:14:17 150

原创 【C++知识扫盲】------C++ 遍历方法与 auto 关键字

传统 for 循环:适用于有索引的容器。range-based for 循环:简洁且适用于所有标准容器。迭代器遍历:适用于需要灵活控制的遍历。

2024-09-14 21:02:00 359

原创 【C++知识扫盲】------C++ 中的引用入门

引用本质上是某个变量的别名。在此例中,print 函数通过常量引用避免拷贝 std::string,但同时保证字符串不会被修改。注意:不要返回局部变量的引用,因为局部变量在函数返回后被销毁,引用将指向无效内存,导致未定义行为。在此例中,getMax 函数返回两个参数中较大值的引用,允许我们修改这个值。在这个例子中,swap 函数使用引用交换两个变量的值,而无需创建副本。常量引用常用于函数参数传递,保证传入的对象不会被修改,同时避免拷贝。引用在使用时不需要解引用,而指针需要使用 * 来访问指针指向的值。

2024-09-14 21:01:05 398

原创 【二叉树遍历算法应用】------补录

但要复制成的新树,应传入结点指针的地址,即二级指针,因为要修改结点指针的值(指向新开辟的结点空间):原本存在的树只是会遍历,不会被修改,故传入一级指针。:只进行遍历,不会修改树的结构,故传入一级指针。

2024-09-14 15:08:24 740

原创 【遍历二叉树】---先,中,后,层序遍历 及 先序建立整树

int10。

2024-09-13 22:50:36 1187

原创 【二叉树的性质与存储结构】

(2)通过存储表中的序号进行元素填入,得到对应的二叉树。(深度为k,每一层上至少有1个结点,总共k个结点)(如果1个结点都没有,就不可能有这么多层了)(1)先画出对应深度的满二叉树,并标号。结点按层序编号(从第。

2024-09-11 19:49:17 1062

原创 【树和二叉树的相关定义】概念

(1)二叉树的结构最简单,规律性最强;(2)可以证明,所有树都能转为唯一对应的二又树,不失一般性。(3)普通树(多又树)若不转化为二叉树,则运算很难实现二叉树在树结构的应用中起着非常重要的作用,因为对二又的许多操作算法简单,而任何树都可以与二叉树相互转换,这样就解决了树的存储结构及其运算中存在的复杂性。每个结点最多有俩孩子(二叉树中不存在度大于2 的结点)子树有左右之分,其次序不能颠倒。二叉树可以是空集合,根可以有空的左子树或空的右子树。

2024-09-10 22:21:33 518

原创 【数组与广义表】(基本概念与思路)

COL每一列间的前驱后继关系:如a00** 在列上的后继为a10ROW每一行间的前驱后继关系:如a00在行上的后继为a01。

2024-09-10 19:41:14 676

原创 串的模式匹配算法

确定中所含第一次出现的位置(

2024-09-09 15:03:14 1039

原创 【串】比较常见的操作-------静态数组实现

用sub返回串s的第pos个字符起长度为len的子串。:传入空串Sub的指针,因为要在函数中往其中添加元素。

2024-09-07 10:57:57 272

原创 【串的相关概念】

注意这里的字符是任意字符:包括特殊字符和空格1.这里注意:index:即字符串的定位操作十分重要(若主串S存在与串T值相同的子串,则返回它在主串S中第一次出现的位置。

2024-09-05 20:07:32 1072

原创 备忘录1【java环境变量手动更改】

B站视屏链接:https://www.bilibili.com/video/BV1cV8BeCESA?

2024-09-03 01:10:14 296

原创 【栈经典问题剖析】上

【代码】【栈经典问题剖析】上。

2024-09-01 19:46:38 270

原创 【链式队列的实现】

一个完整的链式队列包含头指针,尾指针,头结点,一般结点这四个部分//<1>队列结点结构定义//队结点数据域,用来存储队列元素//队结点指针域,用来指向下一个队结点//QNode: 链队列结点类型,用来定义队结点//QNodePtr: 链队列结点指针类型,用来定义队结点指针//<2>队列链式定义//定义链队的头指针,尾指针}LinkQueue;//LinkQueue:通过LinkQueue定义链队列;通过 定义出的链队列 访问队列的头指针,尾指针。

2024-08-31 15:53:30 874

原创 【循环顺序队的实现】

先进先出的线性表在顺序队列中,我们使用头指针front指向队首元素;用尾指针rear指向队尾元素的下一个位置(当然这里的指针是用下标模拟出来的同时顺序队列中的元素当然是用数组来存储的抽象数据类型如下注意这里的传参,本篇使用指针传参,与图中c++的引用有所区别。

2024-08-29 18:29:55 1072

原创 【栈与递归】-------简单了解

若一个对象部分地包含它自己或用它自己给自己定义,则称这个对象是递归的例如:链表的结构树的结构等等若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。递归求n的阶乘1.能将一个问题转变成一个新问题,而新问题与原问题的解法相同或类同不同的仅是处理的对象,且这些处理对象是变化有规律的2.可以通过上述转化而使问题简化3.必须有一个明确的递归出口,或称递归的边界。

2024-08-26 21:16:38 438

原创 【两栈共享空间】------一种特殊的顺序栈

虽然顺序栈的存储已经十分方便,但是它有一个非常致命的缺陷:即必须事先确定数组存储空间的大小,万一不够用就需要动态扩容但对于两个相同类型的栈,我们可以做到最大限度的利用其事先开辟的存储空间,既让两栈共享空间两个栈共享同一个存储空间,这片空间不单独属于任何一个栈,某个栈需要的多一点,它就可能得到更多的存储空间包括了一号栈 与 二号栈的栈顶指针,以及容纳两个栈中元素的数组//1.共享栈的结构定义int top1;//栈1的栈顶指针(从数组的0开始)int top2;

2024-08-26 19:23:49 740

原创 【链栈的实现】--------本质为不带头结点的 头插法建立起来的单链表;头指针即栈顶指针

/1.链栈的结构定义://实际上就是运算受限的单链表,只能在链表头部进行操作//StackNode:用来定义单个链栈的结点//*LinkStack:用来定义整个链栈(即链栈的头指针或者栈顶指针)在结构定义中,一个链栈结点里包含了,指针域,和存放栈元素数据域这两个部分而别名StackNode用来定义单个链栈结点LinkStack 用来定义链栈的头指针(栈顶指针)

2024-08-26 14:56:00 1519

原创 【顺序栈的实现2】--------用int类型的top模拟栈顶指针;且top指向栈顶元素

/1.顺序栈的结构(这里使用角标来模拟栈顶指针)//静态数组存放栈中元素,且栈中元素的个数不超过MAXSIZEint top;//角标模拟栈顶指针}SqStack;在结构定义中,一个顺序栈里包含了,栈顶指针,和存放栈元素的静态数组这两个部分而别名SqStack用来定义顺序栈SqStack* 用来表示指向栈的指针。

2024-08-21 17:41:56 916

原创 【顺序栈的实现1】--------含栈顶,栈底指针;栈顶指针指向栈顶元素的下一个位置

2024-08-20 19:17:49 1561

原创 栈与队列【特殊的线性表】概念

栈(stack)是一个特殊的线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表。又称为后进先出(LastIn First Out)的线性表,简称LIFO结构。队列(queue)是一种先进先出(First In First Out ----FIFO)的线性表。在表一端插入(表尾),在另一端(表头)删除队列 是仅在表尾进行插入、表头进行删除操作的线性表表尾(即an端)称为队尾;表头(即a1端)称为对头;栈与队列是两种常用的,重要的数据结构栈和队列是限定插入和删除。

2024-08-20 16:52:33 385

原创 【线性表】--------图书管理系统的单链表实现

引言:学习完链表,让我们实践一下吧,废话不多说直接上代码。

2024-08-19 16:32:33 411

原创 C知识扫盲-------文件结束符(EOF)

当读取操作到达文件末尾时,fgets 会返回 NULL,这可以用于判断文件读取是否结束。在文件操作中,EOF 是 “End of File”(文件结束)的缩写,用于指示文件的结束。当读取操作到达文件末尾时,fscanf 会返回 EOF,这可用于判断读取是否完成。在读取文件时,可能会遇到错误。当到达文件末尾时,fgetc 会返回 EOF,这通常用于结束读取循环。feof 函数用于检查文件指针是否到达文件的末尾。它常与循环结合使用,以确保在读取文件时处理文件结束的情况。,许多文件操作函数会返回这个值。

2024-08-19 16:20:45 347

原创 C知识扫盲------文件的基本操作

在C语言中,所有的文件操作都是通过文件指针 (FILE*) 来进行的。要对文件进行操作,首先需要用 fopen 函数打开文件,并指定文件的路径和操作模式。filename要打开的文件名(可以包含路径,如 “C:\data\file.txt” 或者 “./file.txt”)。mode文件打开模式,决定了你如何访问文件。

2024-08-19 16:10:26 1136

原创 【线性表】------稀疏多项式加法运算 的 链式实现(带头结点)

多项式中指数由低到高排列每一项的系数非零的多项式//系数int expen;//指数//指针域//Polynomial:多项的与一般的链表结点相同,只不过稀疏多项式结点数据域分为指数和系数两部分。

2024-08-18 15:39:05 873

原创 【线性表】内容总结

存储密度是指结点数据本身所占的存储量和整个结点结构中所占的存储量之比(1)定义三个临时指针://pa用来遍历La//pb用来遍历Lb//pc用来遍历新链表Lc的每个结点(2)初始化pa,pb分别指向La,Lb的首元结点,pc指向新链表的头结点//新链表的头结点可以是La的头结点,也可以是Lb的头结点(3)依次从 La 或 Lb 中摘取元素值较小的结点插入到 Lc 表的最后,直至其中一个表变空为止(4)插入剩余段(注意释放没用的头结点)pa : pb;等价于if(pa!

2024-08-17 11:16:06 981

原创 线性表【双向循环链表基本定义与操作】(带头结点)

双向循环链表的结构与双向链表完全一致,不同之处在于它的尾结点的next指针指向头结点,而头结点的prior指针指向尾结点,从而形成一个循环。//1.双向循环链表的结构定义(与双向链表完全一致)// 数据域//前驱和后继指针//HNode * 用来定义结点指针//HLinkList 用来定义链表指针。

2024-08-14 16:01:29 1298

原创 线性表【双向链表基本定义与操作】(带头结点)

该结点前驱元素的next域指向自己;后继元素的prior域指向自己在双向链表中有些操作(如:ListLength、GetElem,ClearList,Destroy等),因仅涉及一个方向的指针,故它们的算法与单链表的相同。但在插入、删除时,则需同时修改两个方向上的指针,两者的操作的时间复杂度均为 O(n)。//1.双向链表的结构定义多一个指向前驱的指针域// 数据域//前驱和后继指针//DNode * 用来定义结点指针//DLinkList 用来定义链表指针。

2024-08-12 21:29:22 716

原创 线性表【单循环链表的实现】(带头结点,带头尾指针)

图解如下:单循环链表为空表时:其头结点的next域指向它自己,即头结点next等于头指针与单链表的结构定义完全一致int01//1.单循环链表的结构定义不变//数据域//指针域//LNode *用来定义结点指针;//LinkHead 用来定义头指针;//LinkTail 用来定义尾指针;

2024-08-10 20:22:56 1078

原创 C知识扫盲------悬挂指针及其处理方法

悬挂指针(Dangling Pointer)是指向已经释放或不再有效的内存区域的指针。这种指针虽然仍然持有原来的内存地址,但那块内存已经被释放或重新分配给其他对象。悬挂指针问题是内存管理中的一个常见问题,可能会导致程序崩溃、未定义行为或数据损坏。在某些情况下,局部变量的内存区域在函数返回后不会立即被操作系统回收或重用。这意味着,尽管该内存区域理论上已不再有效,但它的内容可能在一段时间内保持不变,因此程序仍然可以读取到旧的值。即使这样,读取这些值依然属于未定义行为。

2024-08-06 20:17:45 529

原创 线性表【单链表的实现】(带头结点)

/结点数据域//结点指针域//注意这里的LinkList为自定义的结构体指针类型,与LNode*等价,最好用来定义头指针用LNode*来定义链表中的每个结点指针LinkList p;LNode* p;//定义结点指针p:两种写法完全等价,但是推荐使用这种写法,以提高代码可读性;LinkList L;//定义链表L(头指针):两种写法完全等价,但是推荐使用这种写法,以提高代码可读性;LNode* L;//数据域的学号部分//数据域的姓名部分int score//数据域的分数部分。

2024-08-06 00:31:27 1108

原创 C知识扫盲------scanf() 和 scanf_s()与缓冲区

scanf() 和 scanf_s() 是 C 语言中用于从标准输入读取格式化数据的函数。它们通过指定格式说明符,从输入流中读取并解析数据,然后存储在对应的变量中。scanf() 和 scanf_s() 是用于读取标准输入的函数,但在使用时需要特别注意安全性。缓冲区溢出是常见的安全问题,scanf_s() 通过要求指定缓冲区大小来防止这种问题。了解缓冲区的作用和常见错误,以及使用 scanf_s() 等安全函数,可以有效避免程序中的安全漏洞,确保程序的安全性和稳定性。

2024-08-06 00:30:52 1111

原创 C知识扫盲------函数参数传递

对于基本类型(如int、char、float等),传递的是变量的值的副本。因此,在函数内对参数的修改不会影响函数外的实际参数。x = 10;// 仅仅修改了副本 xint a = 5;Value(a);//传入变量a// 输出依然是5return 0;在上述代码中,函数Value中的参数x是a的一个副本,对x的修改不影响main函数中的变量a。这里我们可以将主函数中“被修改的指针变量”副本指针所指向的内存中的值当需要在函数中修改指针本身所存储的地址即需要函数能够修改。

2024-08-01 21:11:06 781

原创 线性表【链式存储结构】概念

对于每个数据元素ai数据元素信息后继元素的存储地址结点(Node)结点分为数据域和指针域两部分数据域:存储数据元素信息的域指针域:存储直接后继位置的域n个结点由指针链组成一个链表它是线性表的链式存储映像,称为线性表的链式存储结构。

2024-07-31 17:22:18 272

原创 线性表【顺序存储结构】

零个或多个数据元素的有限序列一般形式如a1, a2, a3, … , an表的大小为n,其中大小为0的表称为空表(empty list)元素ai在表中的位序为i(i从1开始取)表中的每个数据元素可以是简单类型(如整型),也可以是复合类型(如结构体类型)用一段地址连续的存储单元依次存储线性表的数据元素我们通常使用一维数组进行存储存储空间的起始位置:数组data(动态静态均可)表的最大容量:数组长度MaxSize线性表当前长度:lengh。

2024-07-28 18:38:27 606

原创 时间复杂度与空间复杂度

当我们把程序看做一辆马车时,时间复杂度就是衡量马车跑的快不快(程序的运行效率),空间复杂度就是衡量这匹马吃的多不多(程序所需的存储空间的规模)理想情况下我们需要的是**既不吃草还跑的快(时间复杂度和空间复杂度都很低)**的马车,但很显然这是很难做到的所以在程序设计中就有了时间换空间,空间换时间的概念那么什么是时间换空间呢,继续上面的比喻,这时我们就需要的是一辆**吃的少(省空间)且跑的慢(费时间)**的马车那么同理空间换时间,就是说我们需要一辆**吃得多(费空间)且跑的快(省时间)**的马车而在具体的程序设

2024-07-24 16:08:08 715 2

原创 数据结构与算法分析——引言

结构定义:通俗来讲就是某个数据结构在我们的程序中是怎么实现的---------比如链表的结构定义就是一种物理存储单元上非连续、非顺序的存储结构;数据元素 的逻辑顺序是通过链表中的指针链接次序实现的。结构操作:即某个数据结构都支持什么样的操作---------比如链表的插入,删除,遍历,查找等操作对于某个数据结构,虽然我们可能不知道这个数据结构是怎么实现的,但是只要我们了解了这个数据结构的相关性质,我们就可以去使用这个数据结构去进行一些相关的操作如图,存入和取出---------我们每次存入或者取出数据时会存

2024-07-22 23:40:03 372

空空如也

空空如也

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

TA关注的人

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