![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 66
_200_
这个作者很懒,什么都没留下…
展开
-
并查集及实现
并查集及实现原创 2022-09-19 15:03:47 · 508 阅读 · 0 评论 -
容器空间配置器的重要性
容器空间配置器的重要性以vector容器为例,vector的定义如下:#include <iostream>using namespace std;template<typename T>class vector{public: vector(int size = 10) { _first = new T[size]; _last = _first; _end = _first + size; } ~vector() { delete[] _原创 2022-04-27 16:12:43 · 168 阅读 · 0 评论 -
类模板实例 实现vector容器
类模板实例 实现vector容器STL的vector容器是一个动态扩容顺序容器,底层就是一个二倍扩容的数组。在实现vector时,它的实现并没有使用一个数组指针+当前有效位置下标+数组容量大小的形式实现,而是用三个指针来维护这个数组。有三个指针_first、_last、_end,_first为数组的起始地址,_last指向最后一个有效元素的后继位置,_end指向数组末尾的后继位置。_first == _last时,容器为空,_last == _end时,容器满,_end - _first 为容器容原创 2022-04-27 14:40:51 · 323 阅读 · 0 评论 -
链表中环的入口结点
链表中环的入口结点题目:如果一个链表中包含环,如何找出环的入口点?例如:下图所示的链表,环的入口结点是结点3解决这个问题的第一步是如何确定一个链表中包含环。一个包含环的链表,一直向前遍历是无穷次的。那么我们可以用两个快慢指针来解决这个问题。定义两个指针,一个一次走一步,另一个一次走两步。如果快指针追上了慢指针,那么表示链表有环。如果快指针到达链表尾部(next域为空),说明链表无环。确定链表有环之后,我们接下来就是找环的入口了。我们可以用两个指针来解决这个问题。先定义两个指针p1和p2指向原创 2022-01-07 15:42:25 · 322 阅读 · 0 评论 -
头指针单链表的C语言代码实现
头指针单链表的实现point_list.hpoint_list.ctest_main.cpoint_list.h测试代码仅测试插入,删除请自行测试typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }PointList;void InitPointList(PointList** pp); // 初始化 bool InsertPointList(PointList **pp, El原创 2022-01-05 14:32:26 · 540 阅读 · 0 评论 -
带头结点单链表的C语言代码实现
带头结点单链表的实现head_list.hhead_list.ctest_main.c测试代码仅测试插入,删除请自行测试head_list.htypedef int ElemType;typedef struct Node { ElemType data; struct Node *next;}HeadList;void InitHeadList(HeadList* head);int GetLength(HeadList* head);void ShowList(HeadLis原创 2022-01-05 00:15:00 · 404 阅读 · 0 评论 -
单链表中倒数第K个结点
单链表中倒数第K个结点链表结点定义如下:typedef int ElemType;typedef struct Node { ElemType data; struct Node *next;}HeadList;为了得到倒数第k个结点,很自然的想法是先走到链表的尾部,再从尾部回溯k步。而题中所给的链表结点定义可以看出是单向链表,没有从后往前的指针,因此这种思路是行不通的。既然不能从尾部回溯,我们可以把思路回到头结点上。假设整个链表有n个结点,那么倒数第k个结点就是从头结点开始的第n原创 2022-01-07 13:55:27 · 1259 阅读 · 1 评论 -
O(1)时间下删除链表的结点
O(1)时间下删除链表的结点在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点。链表的结点结构如下:typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }PointList;在单链表中删除一个结点,常规的做法无疑是从链表的头节点开始,顺序遍历查找要删除的结点,并在链表中删除该结点。如上图所示的链表中,我们想删除结点i,可以从链表的头结点开始顺序遍历,发现h的原创 2022-01-06 22:27:06 · 167 阅读 · 0 评论 -
静态链表的C语言代码实现
静态链表的C语言代码实现static_link_list.hstatic_link_list.ctest_main.c以下代码仅测试插入操作,删除操作请自行测试static_link_list.h#define MAXSIZE 1000typedef int ElemType;typedef struct { ElemType data; int cur;}Component, StaticLinkList[MAXSIZE];bool InitList(StaticLinkList原创 2022-01-06 19:37:28 · 357 阅读 · 0 评论 -
单链表结构与顺序存储结构优缺点
单链表结构与顺序存储结构优缺点简单地对单链表结构和顺序存储结构做对比:单链表顺序表存储分配方式采用链式存储结构,用一组任意地存储单元存放线性表地元素用一段连续地存储单元以此存储线性表地数据元素时间性能查找的时间复杂度O(n),插入和删除时间为O(1)查找的时间复杂度O(1),插入删除平均需要移动表长一半的元素,时间为O(n)空间性能不需要预先分配存储空间,元素个数不受限制需要预先分配存储空间,分大了浪费,分小了易发生上溢通过上面的对比可以发现:若线性原创 2022-01-06 16:27:34 · 2258 阅读 · 0 评论 -
静态链表(用数组描述的链表)
静态链表在C语言中,因为它具有指针的能力,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加灵活方便。后来的面向对象语言,如Java、C#等,虽然不使用指针,但因为启用了对象引用机制,从某些角度也间接实现了指针的某些作用。但对一些语言,如Basic、Fortran等早期的编程高级语言,由于没有指针,链表结构中的指针域也就没办法实现了。怎么办呢?为了解决指针域无法表示的问题,有人就想出用数组来代替指针,来描述单链表。首先我们让数组的元素都是由两个数据域组成,data和cur。也就是说,原创 2022-01-06 16:02:17 · 739 阅读 · 0 评论 -
数据结构-二叉搜索树(BST)
二叉搜索树二叉树搜索的性质二叉搜索树结点的数据结构二叉搜索树的数据结构二叉搜索树的查询二叉搜索树的插入二叉搜索树的验证二叉树搜索的性质非空二叉搜索树具有以下性质:1)若左子树不为空,则左子树所有结点的值均小于或等于它根节点的值;2)若右子树不为空,则右子树所有结点的值均大于或等于它根节点的值;3)它的左右子树也是一颗二叉搜索树(空树也是二叉搜索树)4)中序遍历为递增序列( 元素不重复)如图:二叉搜索树结点的数据结构这里树结点的值以int举例struct node { node(int原创 2021-10-25 17:50:57 · 152 阅读 · 0 评论 -
数据结构——AVL树
平衡二叉搜索(AVL)树AVL树的性质实现AVL树结点数据结构AVL树的性质BST树虽然可以缩短查找的效率,但如果数据有序或接近有序,BST树就会退化为接近线性的结构,查找元素相当于线性查找,效率低下;AVL树本质上是一颗二叉搜索树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。下面是非平衡二叉搜索树和平衡二叉搜索树对比的例图:实现AVL树结点数据结构结点的值以int型为例子,一个AVL树的结点有5个属性,分别是当前结点的值v原创 2021-10-27 00:08:32 · 132 阅读 · 0 评论 -
数据结构——红黑树
红黑树一、红黑树的性质1、红黑树的基本定义2、比较红黑树和AVL树二、红黑树结构三、实现红黑树1、左旋和右旋2、插入新结点结构调整实现代码一、红黑树的性质1、红黑树的基本定义红黑树(Red Black Tree),简称R-B Tree,是平衡二叉搜索树的一种变体,除二叉搜索树的强制要求外,红黑树还要满足以下要求:1)结点是红色或黑色;2)根节点是黑色;3)每棵红黑树的叶子结点都是不存数据的空结点(每棵红黑树中所有结点只要左或右孩子为空,其指针指向NIL结点);4)每个红色结点的两个子节点不能原创 2021-10-29 22:31:03 · 276 阅读 · 0 评论