数据结构;从练气期到筑基期
文章平均质量分 95
算法与数据结构是计算机科学的基础知识,也是很多程序员面试的重点内容。本分类专栏将总结和介绍常见的算法以及数据结构基本概念和使用方法,帮助读者更系统地学习这一知识体系。
阿森要自信
写是为了更好的思考!阿森讲C/C++,专注于分享编程技巧和经验,让代码走进生活,欢迎关注我的博客,一起努力,一起探索编程的乐趣!
展开
-
【算法与数据结构】深入解析二叉树(一)
数是一种非线性的数据结构,它是由n(n>=0)个有限节点组成一个具有层次关系的集合,把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。注意:树形结构中,子树之间不能有交集,否则就不是树形结构树的相关概念树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法。Linux文件系统中也广泛使用树状图来表原创 2024-03-14 23:12:24 · 1549 阅读 · 60 评论 -
【算法与数据结构】 C语言实现单链表队列详解
前面我们学习了队列的顺序表的实现,本节将用单链表实现队列。队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。下面我们先复习一下队列的基本概念:队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头首先,我们需要定义队列节点的数据结构和队列的数据结构:当我们去定义队列的出队和入原创 2024-03-24 15:26:28 · 2343 阅读 · 20 评论 -
【算法与数据结构】深入二叉树实现超详解(全源码优化)
上节我们学习了二叉树(前中后)序遍历这节将实现二叉树。让我们复习一下二叉树,接着就是二叉树的实现了😊,学习起来吧!满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。原创 2024-03-20 18:23:09 · 3184 阅读 · 73 评论 -
【算法与数据结构】二叉树(前中后)序遍历
或者为空由一个根节点加上两棵别称为左子树和右子树的二叉树组成二叉树可以没有节点(空树)否则,它包含一个根节点,这个根节点最多可以有两个分支:左子树和右子树,左右子树也符合二叉树的定义,可以是空树,或者由根节点和其左右子树组成。因此二叉树的定义采用的是递归的思想:一个二叉树要么为空,要么由根节点和其左右两个子二叉树组成。左右子树本身也符合二叉树的定义,可以递归定义下去。本小节我们将学习二叉树的前中后序遍历!原创 2024-03-18 23:26:24 · 2089 阅读 · 24 评论 -
【算法与数据结构】堆排序&&TOP-K问题
堆排序即利用堆的思想来进行排序,总共分为两个步骤:代码运行:TOP-K问题是数据挖掘和信息检索中的一个重要问题。TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。TOP-K问题是数据挖掘和信息检索中的一个重要问题。TOP-K问题的含义是:给定一个集合,找出其中值最大或最小的前K个元素。常见的TOP-K问题有:查找文档集合中与查询条件最相关的前K篇文档。这在搜索引擎中很常见。从用户评分最高的物品中找出前K个最受欢迎的物品。从数据库中找出收入前K高的用户。从候选原创 2024-03-17 16:55:41 · 2516 阅读 · 18 评论 -
【算法与数据结构】深入解析二叉树(二)之堆结构实现
普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等堆的性质:现在我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆。向下调整算法有原创 2024-03-16 08:00:00 · 2253 阅读 · 65 评论 -
【算法与数据结构】队列的实现详解
入队(Enqueue):通过尾指针添加元素到队列尾部,即向队列中插入元素。出队(Dequeue):通过头指针删除队列头部元素,即从队列中移除元素。空队列:当头指针和尾指针相同时,表示队列为空。满队列:当尾指针指向队列容量最大位置时,表示队列已满。数组实现队列:使用一维数组存储元素,头指针和尾指针分别指向数组的下标位置。链表实现队列:每个元素使用一个节点存储,头节点和尾节点通过指针链接实现队列。头文件:Queue_order.h🌉初始化front和rear都指向-1,表示队列中没有数据。size为0,原创 2024-03-13 13:41:27 · 992 阅读 · 16 评论 -
【算法与数据结构】栈的实现详解
栈的概念:栈的主要特点:先进后出(LIFO, Last In First Out)。新添加的元素都放在栈顶,取出元素时也是从栈顶取出。只允许在一端(栈顶)进行插入和删除操作。插入操作称为入栈,删除操作称为出栈。栈内元素的访问只能是顺序访问,不能随机访问。通常使用数组或链表来实现栈。栈的基本操作:栈的结构:使用数组实现栈时,维护一个指针指向栈顶元素的下一个位置。入栈时将元素添加到数组位置,并将加;出栈时从位置取元素,并将减。使用链表实现栈时,链表的头结点指向栈顶元素。入栈添加新节点到头结点后面,出栈删除原创 2024-03-09 17:25:05 · 1689 阅读 · 17 评论 -
【算法与数据结构】复杂度深度解析(超详解)
如何衡量一个算法的好坏如何衡量一个算法的好坏呢?比如对于以下斐波那契数列:斐波那契数列的递归实现方式非常简洁,但简洁一定好吗?那该如何衡量其好与坏呢?算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。**时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。**在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的原创 2024-02-28 12:15:00 · 3163 阅读 · 74 评论