数据结构
小付同学ing
这个作者很懒,什么都没留下…
展开
-
二叉树的基本知识
二叉树的定义 在引入二叉树之前先对树的概念进行介绍,简单来说树表示一个集合以及集合中元素之间的相互关系。树中的元素称为节点,节点之间一般为父子关系,或者兄弟关系,树都有一个根节点,上下层之间的关系是父子关系,同一层节点之间的关系是兄弟关系,树中一个节点可以有多个孩子。而二叉树就是树的一个特殊的形式,即一个节点中最多包含两个节点。如图所示,节点A就是根节点,节点B,C是兄弟节点,同时两者又分别和下一层的D、E、F构成父子节点。 二叉树的分类 二叉树大致分为以下几类: 满二叉树:即除了叶子节点外,所有的节点都原创 2022-04-20 12:52:12 · 565 阅读 · 1 评论 -
栈和队列的基本知识
基础知识 首先需要注意栈和队列本质的不同:栈是后进先出的类型而队列是先进先出的类型,他们都是STL(C++标准库)中常用的数据结构。STL的引入是为了提供更好的复用性。其中STL也是有不同版本的,最初的版本是HP STL,是开源的,后续的许多版本都是在这个基础上演变的,而目前我们提到的STL一般是指SGI STL,是从上述的版本中演变过来的。同时需要注意的是,栈和队列在STL中一般不划分为容器,而是划分为容器适配器,数据结构示意图如下所示。 栈(stack)对外提供push和pop两个接口,对应入栈和出栈原创 2022-04-15 16:48:28 · 1041 阅读 · 0 评论 -
哈希表的基本知识
基础知识 哈希表(Hash Table)又被称为散列表,是通过键值直接访问数据的一种数据结构,数组就是一种常见的哈希表,因为可以通过下标来访问数据。 ...原创 2022-04-13 16:54:59 · 730 阅读 · 0 评论 -
链表的基本知识
基本理论 和数组不同的是,链表是通过指针串联在一起的一种数据结构,所以链表一般包含两个部分:指针域和数据域。指针域指向链表下一个节点,数据与存放数据。一般来说,如果链表有头节点,头节点不存放数据。常用的链表类型有单链表、双链表、循环链表。单链表的示意图如图所示,双链表就是比单链表多一条往回的线,循环链表就是尾节点指向头节点: 由于链表使用指针进行索引,所以在内存中的不是连续存放的,分配机制取决于你的操作系统内存管理机制。常见链表的操作是增加、删除、查找、打印等,由于是链式存储,所以增加和删除不用大规模移动原创 2022-04-10 10:55:05 · 453 阅读 · 0 评论 -
数组的基本理论
基础理论 数组是C++中基础的数据结构,在许多场景下都有使用,例如vector的底层实现就是数组。数组的定义是存放在连续空间内的相同类型元素的集合,因此可以方便的通过下标的方式进行索引。一般情况下,数组的下标是从0开始的。如下图所示: 因为数组元素的连续存储,所以插入和删除的需要移动大量的元素。数组中的元素不能被删除,只能被覆盖,就是将删除元素后面的元素往前移动,覆盖原来的数据,达到删除的目的,插入也类似,需要移动大量的元素,所以时间复杂度都为O(n)。另外需要注意的是,在C++中二维数组的存放形式也是连原创 2022-04-09 10:27:16 · 597 阅读 · 0 评论 -
二叉树层序遍历
一,概念 层序遍历就是一层一层从左到右遍历二叉树,所以也被称为广度优先遍历,跟之前的前中后序遍历有所不同。 二,思路 由于需要逐层去读,需要一个队列保存每一个节点,还需要一个数组去保存节点的值。 具体思路:如果根节点不空,就入队,然后出队,把值保存在数组中。然后把其左右孩子入队,重复上述操作,直到遍历完成。 三,实现 代码实现如下: /** * Definition for a binary tree node. * struct TreeNode { * int val; * Tr原创 2021-09-13 09:30:13 · 108 阅读 · 0 评论 -
迭代法遍历二叉树
二叉树遍历(迭代版) 二叉树的遍历主要分为四种,前序遍历,中序遍历,后序遍历和层序遍历。之前写过递归版,本次主要将前三种的遍历的迭代版本。迭代版本需要自己写一个栈来实现数据的存取。具体如下: 前序迭代法 首先自己创建一个栈,栈是后进先出的线性表,所以每次只能将栈顶元素弹出,根据前序遍历的规则,如果根节点不为空,将根节点入栈,弹出,然后遍历根节点的左子树,入栈,弹出,然后遍历根节点的右子树。 /** * Definition for a binary tree node. * struct TreeNod原创 2021-04-18 12:07:27 · 493 阅读 · 0 评论 -
二叉树遍历
二叉树遍历 二叉树的遍历主要分为四种,前序遍历,中序遍历,后序遍历和层序遍历。本次主要将前三种的遍历的递归版本,还有迭代版本,后续会写。其中前序遍历方式是根节点,左节点,右节点; 中序遍历遍历方式是左节点,根节点,右节点;后序遍历是左节点,右节点,根节点。 前序遍历 前序遍历是很常见的一种类型,理解起来也很容易,一般建立二叉树就是通过前序遍历来创建的。前序遍历简单来说就是中左右,先访问根节点,然后一直向左遍历,当遍历到最左边的时候,访问并遍历右节点。 /** * Definition for a bina原创 2021-04-18 11:08:33 · 84 阅读 · 0 评论