
数据结构初阶
文章平均质量分 68
Hey pear!
空杯心态 C/C++ 嵌入式
展开
-
基于顺序表的排序
基于顺序表的排序。原创 2024-06-20 00:00:00 · 510 阅读 · 0 评论 -
字符串及其应用
编写程序实现字符串的基本运算:(1) 求串的长度、两串连接、串比较、子串匹配;(2) 用库函数直接实现上一步的字符申操作。原创 2024-06-14 14:06:02 · 410 阅读 · 0 评论 -
基于顺序表与链表的顺序查找(顺序表的折半查找)
基于任意一个顺序表、链表,实现顺序查找算法; 实现折半查找算法,并思考折半查找算法的适用场景;原创 2024-06-14 14:02:59 · 458 阅读 · 0 评论 -
二叉树及其遍历
(1)通过先序遍历序列ABD#G###CE#F##构造二叉链表方式存储的二叉树 (为了简化运算,data类型可以是字符型);(2) 遍历二叉树,输出先序遍历的序列;(3) 遍历二叉树,输出中序遍历的序列;(4) 根据输出的先序、中序序列,画出二叉树的结构;原创 2024-06-14 14:02:39 · 468 阅读 · 0 评论 -
队列及其应用
请设计一个简单的模拟银行排队系统,要求程序具有以下4项菜单:1.取号。选择该菜单后,为客户产生一个排队号。2.叫号。选择该菜单后,显示可服务的客户排队号。3.查看队伍。从队首到队尾列出所有排队客户的排队号。4.退出系统。原创 2024-06-06 00:00:00 · 266 阅读 · 0 评论 -
堆栈的简单应用
利用栈后进先出的特点,将单链表中的结点从链表头开始依次压栈,然后再依次出栈,采用尾插法重新生成单链表原创 2024-05-31 13:37:20 · 184 阅读 · 0 评论 -
链表的简单应用
编写完整程序LinkList.c或LinkList.cpp实现链表的初始化、查找、插入、删除、遍历等操作。原创 2024-05-30 05:00:00 · 446 阅读 · 0 评论 -
顺序表及其应用
掌握顺序表的初始化,初始化、查找、插入、删除、遍历、查看实际长度等操作。原创 2024-05-25 07:00:00 · 378 阅读 · 0 评论 -
数据结构初阶思维导图
思维导图原创 2022-07-15 14:45:34 · 369 阅读 · 1 评论 -
啃下大骨头——排序(二)
:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。找到最大的数往后排冒泡排序的:代码 其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止上述为快速排序递归实现的主框架,发现与二叉树前序遍历规则非常像,同学们在写递归框架时可原创 2022-07-03 15:09:29 · 283 阅读 · 29 评论 -
啃下大骨头——排序(一)
:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。:数据元素全部放在内存中的排序。:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。 直接插入排序是一种简单的插入排序法,其是:把待原创 2022-06-28 11:25:24 · 213 阅读 · 30 评论 -
如何完美吃下二叉树?——二叉树练习题
下列数据结构中,不适合采用顺序存储结构的是( )A 非完全二叉树B 堆C 队列D 栈在具有 2n 个结点的完全二叉树中,叶子结点个数为( )A nB n+1C n-1D n/2 LeetCode 遍历,拿一个基准值去和树里的每一个值去比较 分别用每个结点与他们的孩子相比较 LeetCode LeetCode LeetCode LeetCode有点难度 把原树中所有子树都找出来与subRoot比较怎么找出所有子树?每个结点都是一个子树的根 遍历原创 2022-06-11 15:41:48 · 2188 阅读 · 46 评论 -
一目了然——堆的概念及结构
如果有一个关键词的集合K = {k0,k1,k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki = K2i+2) i = 0,1,2…则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。 堆中某个节点的值总是大于或小于其父节点的值;堆总是一棵完全二叉树。 逻辑结构是想象出来的,堆的逻辑结构是个二叉树物理结构是数组 ——O(N*logN) 选出最大的前k个 Heap.h Heap...原创 2022-06-11 13:36:18 · 1567 阅读 · 28 评论 -
一目了然——堆与二叉树
本篇文章主要讲解堆的应用以及链式二叉树的实现与应用通过这篇文章,大家应该能对堆与二叉树更好的理解 如果每次都使用建堆选数,整体的时间复杂度是O(N)利用堆删除思想来进行排序 向上调整是从最后一排开始调整,但向下调整没算最后一排,而且,最后一排结点数比较多,差不多占了总结点的一半,所以向上调整的时间复杂度就比较大 N个数中找出最大或最小的前k个找最大前k个:排序 N个数的大堆,Top/Pop k次 注意: 递归结构遍历:区别在于:访问根的时机(Preorder Travers原创 2022-06-02 20:57:31 · 827 阅读 · 46 评论 -
教你一目了然树的概念与结构(入门级)
1.树概念及结构 1.1树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点(第一个)除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<=m)又是一棵结构与树类似的子树 每棵子树的根结点有且只有一个前驱,可以有0个或多个后继.因此,树是原创 2022-06-01 19:20:23 · 902 阅读 · 46 评论 -
函数栈帧的创建和销毁
我们学习函数的时候总会有诸多疑惑:局部变量是怎么创建的? 为什么局部变量不初始化的值是随机值? 函数是怎么传参的?传参的顺序是怎样的? 形参和实参是什么关系? 函数调用是怎么做的? 函数调用结束后是怎么返回的?接下来来带大家解答疑惑:使用的编译环境是VS2013,不同的环境会有差异寄存器:eaxebxecxedxebpesp函数栈帧由这两个寄存器维护ebp 栈底指针esp 栈顶指针这两个寄存器中存放的是地址,这.原创 2022-05-24 22:29:57 · 463 阅读 · 16 评论 -
栈和递归——刷题oj及概念选择题
1.编程oj题1.1有效的括号1.1.1题目力扣1.1.2思路:不能数数量,数量对得上不一定是正确的用栈来解决:左括号入栈右括号出栈1.1.3代码//先写一个栈//////////////////////////////////////////////typedef char STDatatype;typedef struct Stack{ STDatatype* a; int top; // 栈顶.原创 2022-05-24 18:49:44 · 301 阅读 · 9 评论 -
栈stack和队列Queue
目录1.栈1.1栈的概念及结构1.2栈的实现完整代码Stack.cTest.c2.队列2.1队列的概念及结构2.2队列的实现完整代码Queue.hQueue.cTest.c2.3队列应用的两个场景:1.栈1.1栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。(顺序表和链表可以在任意位置插入和删除数据)栈中的数据元素遵守后进先出L原创 2022-05-23 19:06:05 · 478 阅读 · 12 评论 -
链表的种类以及与顺序表的区别
目录链表的种类1. 单向或者双向2. 带头或者不带头3. 循环或者非循环单链表与顺序表的区别顺序表与链表的区别硬件小知识——了解链表的种类链表有八种组合出来的结构1. 单向或者双向2. 带头或者不带头带哨兵位的尾插非常方便3. 循环或者非循环六种每三个相互组合就是八种单链表与顺序表的区别之前学的就是最常见的单链表结构:单向,不带头,不循环方便头插头删考察逆置...原创 2022-05-20 13:26:24 · 1143 阅读 · 19 评论 -
双向链表的实现
目录尾插头插双向链表的实现List.hList.cTest.c先细节讲解头插与尾插的写法尾插void ListPushBack(LTNode* phead, LTDataType x){ assert(phead); //只需让newnode指向前一个指针,前一个指针指向newnode //newnode作新的尾结点,newnode->next指向头 //定义一个新的结点 LTNode* newnode = BuyListNod原创 2022-05-18 15:01:18 · 323 阅读 · 16 评论 -
链表oj刷题——6道进阶题目
目录1.链表分割题目:思路:2.链表的回文结构题目:思路:3. 输入两个链表,找出它们的第一个公共结点。题目:思路一:思路二:思路三:4. 给定一个链表,判断链表中是否有环题目:思路:5. 给定一个链表,返回链表开始入环的第一个结点。 如果链表无环,则返回 NULL题目:思路:6. 给定一个链表,每个结点包含一个额外增加的随机指针,该指针可以指向链表中的任何结点或空结点。题目:思路:1.链表分割原创 2022-05-13 21:58:25 · 1524 阅读 · 31 评论 -
5道入门单链表初阶题目
目录1.删除链表中等于给定值 val 的所有结点1.1第一种方法:1.2第二种方法:1.3改善代码2.逆置单链表2.1头插思路:2.2指针方向颠倒:3.给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。4. 输入一个链表,输出该链表中倒数第k个结点5. 将两个有序链表合并为一个新的有序链表并返回。5.1不带哨兵位的写法:5.2带哨兵位的写法:1.删除链表中等于给定值 val 的所有结点...原创 2022-05-10 22:46:17 · 1101 阅读 · 22 评论 -
单链表知识点以及实现
前情回顾顺序表:数据存在一个连续的物理空间中优势:物理空间连续 下标的随机访问劣势:空间不够,需要扩容。扩容有一定性能消耗,其次一般扩容2倍,会存在一些空间浪费。 头部或者中间位置的插入删除效率低下(只有尾插尾删效率比较高)有什么改善方式呢?那我们就需要链表结构来进行改善。1.链表1.1 链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。按需申.原创 2022-05-06 15:19:11 · 1021 阅读 · 12 评论 -
线性表和顺序表
1.线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。2.顺序表2.1概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。(要求:数据必须从第一个位置开始,原创 2022-04-25 20:00:20 · 2587 阅读 · 26 评论 -
算法的时间复杂度和空间复杂度
1.算法效率1.1算法的复杂度算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。(主要关注时间原创 2022-04-20 18:54:38 · 763 阅读 · 17 评论