
C/C++
文章平均质量分 72
学C++后悔两年,不学后悔一辈子
喵汪wow
业精于勤荒于嬉,行成于思毁于随。
展开
-
链式队列的基本操作与实现(数据结构与算法)
【代码】链式队列的基本操作与实现(数据结构与算法)原创 2023-11-18 16:37:17 · 368 阅读 · 0 评论 -
循环队列(出队、入队、判空、长度、遍历、取头)(数据结构与算法)
头尾相连:循环队列将队列的头部和尾部连接起来形成一个环状结构,当队列的尾部指针达到数组的最末尾时,它将会绕回到数组的开头。涉及到移动、赋值原队列参数的函数参数列表如front,rear,都最好别用&引用,否则会修改原队列中的地址和数值如:SqQueue &Q。这意味着在将变量传递给函数时,将创建该变量的一份副本,并在函数内部使用该副本。这意味着该函数将直接操作传递给它的变量,而不是创建该变量的副本。使用SqQueue Q作参数列表时,函数引入的只是一份副本,不会修改原队列中变量、指针的空间地址与数值。原创 2023-11-18 14:20:19 · 2644 阅读 · 0 评论 -
(C++)栈的顺序存储及实现(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
【代码】栈的顺序存储及实现(出栈、入栈、判空、遍历、销毁)(数据结构与算法)原创 2023-11-16 16:41:32 · 1023 阅读 · 0 评论 -
(C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
链栈是运算受限的单链表、只能在链表头部进行操作 1.链表的头指针就是栈顶,链头为栈顶,链尾为栈底 2.栈的链式存储不需要附设头节点 3.基本不存在栈满的情况,不需要判断栈满,但要判空 4.空栈相当于头指针指向空 5.插入和删除仅在栈顶处执行 6.因为是动态分配空间,所以需要释放原创 2023-11-16 16:22:43 · 934 阅读 · 0 评论 -
栈的顺序存储实现(C语言)(数据结构与算法)
10//定义栈中元素的最大个数ElemType data[MaxSize] //静态数组存放栈中元素int top;//栈顶指针}SqStack;//初始化栈S.top = -1;//初始化栈顶指针//判断栈空if(S.top == 1) //栈空else //不空SqStack S;//声明一个顺序栈(分配空间)//.....后续操作......(增删改查)原创 2023-11-09 21:33:28 · 966 阅读 · 0 评论 -
静态链表的定义与基本操作(C语言版)(数据结构与算法)
由于静态链表没有指针来直接跳转到下一个节点,所以需要使用游标来遍历链表。在静态链表中如果要表示,这个结点是最后一个结点,游标的值可以设为 -1, 表示之后已经没有其他结点了。遍历静态链表,找到要插入位置的前一个节点。可以使用一个游标来遍历链表,初始时指向链表的头节点。将新节点的下一个节点指向前一个节点的下一个节点,然后将前一个节点的下一个节点指向新节点的位置。这是一个简单的线性查找算法,时间复杂度为O(n),其中n是链表中节点的数量。在静态链表的空闲位置上分配一个新节点,为新节点赋值。原创 2023-11-04 20:00:22 · 2821 阅读 · 0 评论 -
算法的基本概念(数据结构与算法)
数据结构提供了一组基本的操作来对数据进行存储、检索、插入、删除等操作,如查找、排序、插入、删除和修改等。数据结构是指数据元素之间的关系和组织方式,在计算机科学中被广泛应用于存储和操作数据的方法和技术。线性结构:数据元素之间存在一对一的关系,如数组、链表、栈和队列。非线性结构:数据元素之间存在一对多或多对多的关系,如树和图。链式存储结构:通过指针将数据元素连接在一起,如链表、树和图。顺序存储结构:使用一段连续的存储空间存储数据元素,如数组。数据元素是构成数据的基本单位,可以是数字、字符、记录等。原创 2023-11-04 16:42:57 · 209 阅读 · 0 评论 -
循环链表(单循环、双循环)(数据结构与算法)
循环单链表与普通单链表的主要区别在于,循环单链表的尾节点的指针不是指向 nullptr,而是指向头节点,形成一个闭环。这意味着,在循环单链表中,可以通过尾节点的指针重新回到头节点。循环双链表与普通双链表的主要区别在于,循环双链表既具有双向链表的前驱和后继关系,也具有循环遍历的能力。原创 2023-11-04 16:31:41 · 4144 阅读 · 0 评论 -
数据结构与算法超详细笔记(含代码分析)
2.1 顺序表的定义与实现2.2 顺序表的插入和删除2.3 顺序表的查找(按值、按位查找)3.1 单链表的插入与删除3.2 单链表的查找(按值、按位查找)3.2 单链表的建立(头插法、尾插法)持续更新中。原创 2023-11-04 10:16:51 · 227 阅读 · 0 评论 -
双链表详解(初始化、插入、删除、遍历)(数据结构与算法)
同时,删除节点后必须确保释放相应的内存空间,以防止内存泄漏问题的发生。11. 双链表相较于单链表需要额外存储指向前一个节点的指针,因此会在空间上占用更多的内存。7. 双链表的每个节点包含三个部分:数据域、指向前一个节点的指针和指向下一个节点的指针。在双链表中删除节点的操作相对比较复杂,因为我们需要维护前驱节点和后继节点之间的指针连接。在双链表中插入节点需要更新前驱节点和后继节点的指针连接,操作相对比较复杂。将 p 结点的next指针,指向q结点的后继结点。程序设计如下:注意修改指针时要注意顺序!原创 2023-11-04 09:23:43 · 3934 阅读 · 2 评论 -
单链表的建立(头插法、尾插法)(数据结构与算法)
如果要把很多个数据元素存到一个单链表中,如何操作?1.初始化一个单链表2. 每次取一个数据元素,插入到表尾/表头。原创 2023-11-03 19:35:58 · 7300 阅读 · 0 评论 -
单链表的查找(按值查找、按位查找)(数据结构与算法)
什么是单链表?单链表是一种常见的链式数据结构,用于存储和操作数据元素的集合。它由一系列的节点组成,每个节点包含两个部分:数据域和指针域。单链表的每个节点包含了存储数据的数据域,以及指向下一个节点的指针域。通过这些指针域,节点之间可以按顺序连接起来,形成一个链式结构。链表的最后一个节点通常指向一个特殊的空节点(NULL或nullptr),表示链表的结束。相比于数组,链表的一大优势是它的动态性。在链表中,节点的添加、删除可以通过修改指针的指向来完成,不需要像数组那样进行元素的移动。原创 2023-11-03 11:28:07 · 7227 阅读 · 4 评论 -
单链表的插入删除(数据结构与算法)
单链表是一种常见的线性数据结构,由一个个节点组成,每个节点包含两个部分:数据部分和指针部分。单链表的特点是每个节点只能指向下一个节点,而最后一个节点指向一个空指针。这个空指针常用来表示链表的结尾,一般命名为 nullptr。原创 2023-10-27 11:12:30 · 7561 阅读 · 4 评论 -
顺序表的查找(按位查找、按值查找)(数据结构与算法)
能够实现随机存储的基础就在于顺序表中所有的数据元素在内存里都是连续存放的,并且这些数据元素的数据类型相同,也就是说每个数据元素所占的内存空间一样大。所以我们只需要知道一个顺序表的起始地址,每个数据元素的大小,就可以立即找到第 i 个元素的位置。按值查找操作,在表L中查找具有给定关键字值的元素。GetElem(L, i) :按位查找,获取表L中第 i 个位置元素的值。如果换一个类型的指针,指向同一个地址,int *p;顺序表的按位查找---------动态分配。原创 2023-10-26 20:33:37 · 1652 阅读 · 1 评论 -
顺序表的定义与实现(数据结构与算法)
首先,需要定义一个结构体或类来表示顺序表,可以包含如下成员:- 数据区域的指针,用于存储元素的数组。- 当前顺序表的大小(元素个数)。- 当前分配的存储空间大小。- 其他辅助变量或信息。原创 2023-10-26 09:52:46 · 530 阅读 · 0 评论 -
顺序表插入和删除(数据结构与算法)
顺序表是一种数据结构,其元素在内存中连续存储,并且可以使用下标直接访问每个元素。在顺序表中插入或删除元素时,需要移动后续元素的位置以保持顺序表的有序性。对于在下标位置i处插入值为x的元素,需要将下标为i~n-1的所有元素向右移动一个位置,然后将x插入到位置i的元素中。对于删除操作,需要将下标为i+1~n-1的所有元素向左移动一个位置,然后将下标为n-1的元素置空。需要注意的是,当动态扩展顺序表时,需要重新分配内存空间,因为当前内存空间可能已经被占满了。同时,为了减少多次扩充内存空间的开销,可以考虑一次原创 2023-10-26 11:22:39 · 9400 阅读 · 0 评论 -
单链表的定义(数据结构与算法)
单链表是一种常见的数据结构,用于存储元素的序列。它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的引用(指针)。单链表中的节点之间通过指针连接起来,形成一个线性结构。单链表是一种简单但灵活的数据结构,常用于实现队列、堆栈和图等其他高级数据结构。原创 2023-10-26 21:18:42 · 1369 阅读 · 0 评论 -
c++中操作符->与 . 的使用与区别
在C++中,**->** 和 **.** 是两个不同的成员访问操作符,用于访问类、结构体或联合体的成员。原创 2023-10-08 11:08:05 · 959 阅读 · 1 评论 -
new和malloc的区别
和都是在中用于动态分配内存的方式,但它们之间有一些重要的区别。原创 2023-10-07 16:20:59 · 278 阅读 · 0 评论 -
C++中类模板的语法与使用
typename定义类模板:使用template关键字和类型参数声明类模板,定义类的成员和方法,并在需要时使用类型参数。// 类模板定义的成员和方法实例化类模板:通过提供具体的类型参数来实例化类模板,并创建特定类型的对象,编译器会根据具体的类型参数生成相应的类代码。。// 实例化一个存储整数的堆栈// 实例化一个存储字符串的堆栈使用实例化后的对象:对于每个实例化后的类,你可以像使用任何其他类一样使用它,调用它的成员函数,访问它的成员变量,并根据需要进行操作。原创 2023-10-07 11:30:48 · 134 阅读 · 0 评论 -
C++中new的语法与使用
C++ 中的,它是用于动态分配内存的关键字。让我们从零基础的角度来阐述的作用。在 C++ 中,内存可以静态分配和动态分配。静态分配指的是在编译时为变量分配固定的内存空间,而动态分配则是在程序运行时根据需要分配内存空间。使用,可以在运行时动态地分配内存空间,并返回得到分配的内存块的地址。这个过程被称为动态内存分配。原创 2023-10-07 16:08:23 · 967 阅读 · 0 评论 -
VSCode 安装配置教程详解包含c++环境配置方法
重启之后在盘中新建一个Helloworld文件夹,选中文件-将该文件添加进工作区,为确保编译器已正确安装和配置,我们将创建最简单的 Hello World C++ 程序。当初我的mingw64是安装在F盘的,因此在终端中先输入F: 切换到F盘,接着输入g++ --version回车,如图表示安装成功。如图,主目录中不含空格,中文以及其他字符,解压后放到mingw64文件夹,这个文件很重要,一定要仔细。下载完成后,解压到不含空格与字符、中文的目录下,以下目录是错误的,我将其解压到上一级目录中。原创 2023-06-19 13:51:03 · 4062 阅读 · 0 评论 -
C语言指针入门学习、知识点梳理(四)
形参和实参永远不同,他们在不同的函数中,分配的空间也不同,属于不同的变量,主函数传递给调用函数的值相当于是拷贝过去的,并不影响主函数中的实参,只有调用函数有了主函数变量的地址时,才可以直接控制修改实参变量,而指针可以通过地址在调用函数中远程修改主函数中的变量值。原创 2023-06-16 13:18:46 · 1140 阅读 · 0 评论 -
C语言指针入门学习、知识点梳理(三)
p是地址,*p是值,p和q的地址互换并不影响a,b ,a,b的地址和值并没有改变, 通俗来讲就是:a,b分别住在两间房中,p,q把门牌号互换了,但a,b还各自躺在原来的房间里,房间相对于走廊的地址并没有变(如a开始是在二楼第一间,互换门牌号后还是在二楼第一间)。原创 2023-06-16 01:19:18 · 475 阅读 · 0 评论 -
C语言指针入门学习、概念梳理(二)
int * p 定义的是p而不是*p,未初始化赋值时,系统给p随机分配了一个未知垃圾地址,*p代表p指向的垃圾地址中所存放的未知内容(可能是系统中的重要数据,若被更改,系统可能崩溃),故系统无权对*p进行读写。原创 2023-06-14 12:49:07 · 735 阅读 · 0 评论 -
C语言指针入门学习、概念梳理(一)
首先,搞清楚指针是什么?-------指针就是个地址,指针和地址是一个概念。那地址又是什么?----- 地址就是内存单元的编号以内存条为例,里面分很多小单元,其中一个单元有八位(存放8个0或8个1),也就是说内存的编号是以字节来算的,而不是位。不是一个0/1为一个编号,而是8个0/1作为一个编号如1000 0010为一个编号,即一个字节,该编号即为地址。程序示例1int * p;//p是变量的名字,int * 表示p变量存放的是int类型变量的地址,p只能存放整形变量地址。int i = 3;原创 2023-06-04 10:09:32 · 762 阅读 · 0 评论 -
“const char *“ 类型的值不能用于初始化 “char“ 类型的实体
因为const char* 和char *类型不匹配解决的方法有三种: 使用强制类型转换:char str = "hello world"; //错误代码 双引号char str = (char)"hello world";//正确代码 使用强制类型转换 先用字符数组进行存储,然后再使用指针:char str[] = "hello world"; 在visual studio中,在项目上右键,在弹出菜单上选择“属性”,选择“C/C++”,然后在“语言”中,把“符合模式”原创 2021-02-10 13:13:05 · 1803 阅读 · 2 评论