数据结构
文章平均质量分 68
Silver Star
这个作者很懒,什么都没留下…
展开
-
【数据结构】【王道】【树与二叉树】并查集的实现及优化(可直接运行)
并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题,常常在使用中以森林来表示。正如其名,主要有查找与合并两个操作。Union操作优化目的:减少Find操作的所需的时间方法:在构建新树时,尽可能不让树长高(这样可以降低Find操作最坏时间复杂度)具体实现方法:将根结点的值改为(-结点数,即负结点数),再根据此为依据,让小树合并到大树上通过此优化树的高度不会超过log2n(向下取整) + 1之后Find操作的最坏时间复杂度为O(log2n)...原创 2022-07-28 10:07:45 · 921 阅读 · 3 评论 -
【数据结构】【王道】【树与二叉树】中序二叉线索树的实现及基本操作(可直接运行)
在含有n个结点的二叉树中,有n+1个空指针,即每个度为1的结点有一个空指针,每个叶子结点有两个空指针,这就造成了空间的浪费。可以通过一些方法将这些空指针充分利用起来,即将这些空指针改成指向前驱或后继的线索,可以视为在原本的二叉树上用空指针建立一个线索链表,加上了线索的二叉树也可称为线索二叉树。要找到一个结点的后继,如果右孩子指针tag==1,直接用线索即可,如若不为1,那么就要根据中序遍历的特点来寻找后继结点,即左根右。如果该结点有右孩子且右孩子为叶子结点,那么这就是其后继结点,如果该节点有右孩子,且为分支原创 2022-07-25 10:09:56 · 677 阅读 · 4 评论 -
【数据结构】【王道】【树与二叉树】二叉树非递归遍历的实现(可直接运行)
如果结点不为空,则先将结点压入栈中,然后先遍历此结点下所有左孩子,直至某一个左孩子为NULL,然后弹出栈顶结点并访问,若其右孩子不为NULL则进入其右子树进行上述操作,直至某个结点有孩子为NULL为止,若其右孩子为NULL则继续弹出栈顶结点进行访问,然后继续上述操作,直至退出循环为止。可以以另一种较为巧妙的方式实现,可知后序遍历结果为左右根,先序遍历结果为根左右,可将先序遍历循环中左右全部互换,结果应为根右左,然后将结果全部取反,可得左右根,即后序遍历结果。但需要额外设立一个栈,增加了空间开销。......原创 2022-07-23 09:13:40 · 1596 阅读 · 5 评论 -
【数据结构】【王道】【树与二叉树】二叉树层序遍历实现(可直接运行)
实现思路借助一个辅助队列,从根节点开始,根结点入队,访问此结点后出队,并将此结点的左右孩子入队(如果有),再依次对队头结点执行上述操作,直至队列为空为止。层序遍历即是一层一层从左至右访问二叉树每个结点,类似于广度优先遍历。...原创 2022-07-22 09:24:17 · 592 阅读 · 0 评论 -
【数据结构】【王道】【树与二叉树】二叉树的实现及基本操作(可直接运行)
各部分的解释已经以注释形式写于代码中。// 先序遍历// 即根左右,先访问根结点,再依次访问左右结点void PreOrder(BiTree T) { // 根节点为空则直接跳过 if(T != NULL) { // 访问根结点 visit(T); // 递归访问左子树 PreOrder(T->lchild); // 地柜访问右子树 PreOrder(T->rchild); }}.原创 2022-07-21 09:50:33 · 623 阅读 · 2 评论 -
【数据结构】【栈】括号匹配算法(可直接运行)
假设表达式中允许包含三种括号()、[]、{},其嵌套的顺序任意,即([]{})或[()[]{}]等均为正确的格式,实现一个算法,完成对表达式中括号的检验。(5)从栈顶取出元素,检测此左括号与读入右括号是否匹配,如果不匹配,则返回匹配失败。(4)如果是右括号,则先检查栈是否为空,如果栈为空,则表示无左括号与之匹配,匹配失败。(6)检测栈是否为空,如果栈为空,则表示匹配完成后还有多余的括号,匹配失败。(4)直至第四个括号出现,发现其能与最近的第三个括号匹配,那第三个括号匹配完成,退出等待。...原创 2022-07-17 10:19:06 · 23042 阅读 · 8 评论 -
【数据结构】【王道】【栈与队列】不带头结点链式队列的实现及基本操作(可直接运行)
代码】【数据结构】【栈与队列】不带头结点链队的实现及基本操作(可直接运行)#include#includetypedef struct LinkNode { // 链式队列结点 int data; // 数据域 struct LinkNode *next; // 指针域} LinkNode;typedef struct { // 链式队列 // 如果不设置尾指针,若要插入,遍历到队尾再插入,时间复杂度O(n) .........原创 2022-07-16 10:21:03 · 662 阅读 · 1 评论 -
【数据结构】【王道】【栈与队列】链式队列的实现及基本操作(带头结点)(可直接运行)
代码】【数据结构】【栈与队列】链队的实现及基本操作(带头结点)(可直接运行)#include#includetypedef struct LinkNode { // 链式队列结点 int data; // 数据域 struct LinkNode *next; // 指针域} LinkNode;typedef struct { // 链式队列 // 如果不设置尾指针,若要插入,遍历到队尾再插入,时间复杂度O(n) ............原创 2022-07-16 10:12:25 · 360 阅读 · 0 评论 -
【数据结构】【王道】【栈与队列】循环队列的实现及基本操作(使用顺序队列)(可直接运行)
即表示已经队满,但是如果在此时进行出队,由于出队是在队头操作,即使队尾满了,进行出队操作之后,队头前会空置出大量的空间,直至最后一个元素,此时队头指针、队尾指针都指向一个位置,这也是判空的条件,队尾指针等于MaxSize,表示队已经满了。但事实上,队列还有一个元素未出队,且线性表中还有大量的空间未曾使用,此种溢出并不是真正的溢出,而是“假溢出”。队列是一种操作受限的线性表,入队是在队尾入队,出队是在队头出队,在不出队的情况下,如果出现。,可以通过取模运算,使rear重新指向队头,当然,此前需要进行判定。..原创 2022-07-15 10:46:35 · 1533 阅读 · 2 评论 -
【数据结构】【王道】【栈与队列】不带头结点链栈的实现及基本操作(可直接运行)
总目录链栈实际上与单链表极为相似,区别主要在于判断条件以及链栈的操作只能在表头进行,即就是将单链表的操作固定在了表头。此处实现的是不带头结点的链栈,与带头结点的主要差别在于带头结点的链栈栈顶指针指向以及条件判断方面。实际上,相比于单链表带头结点对于不带头结点的优势,链栈由于都是在表头进行操作,所以带头结点链表的统一操作的优势便难以表现出来了。综上,带头结点的链栈实现其实与带头结点单链表相差不大,此处便不进行实现了。2.2 初始化2.3 判空2.4 入栈2.5 出栈2.6 获取栈顶元素原创 2022-07-14 11:11:18 · 1509 阅读 · 0 评论 -
【数据结构】【王道】【栈与队列】顺序栈的实现及基本操作(可直接运行)
总目录1.2 初始化1.3 判空1.4 入栈1.5 出栈1.6 取栈顶元素1.7 弹出并输出栈中所有元素2.完整代码3.运行截图原创 2022-07-13 17:26:34 · 400 阅读 · 1 评论 -
【数据结构】【王道】【线性表】循环链表的实现及基本操作(可直接运行)
总目录由于循环链表尾部并未指向空,而是指向头指针。循环单链表尾结点指针域指向头结点;循环双链表尾结点后继指针指向头结点,头结点前驱指针指向尾节点。故而各类基本操作与之前单链表、双链表基本操作相差不大,主要就是在于对尾结点的处理问题,之前非循环链表尾结点指向空,如果要执行插入、删除等可能需要对后继结点取指针域的操作会导致报错,而循环链表就没有这个问题,因为它尾结点并非指向空。综上,在此处不会给出全部的基本操作,仅给出简单插入和删除作为示例,可与博主之前实现单链表、双链表的文章参照查看,改动主要是对于尾结点的原创 2022-07-12 11:49:12 · 515 阅读 · 0 评论 -
【数据结构】【王道】【线性表】双链表的实现及基本操作(可直接运行)
总目录1.2 初始化1.3 判空1.4 结点后插入_11.5 结点后插入_21.6 按位序插入1.7 删除后继结点1.8 按位查找1.9 按值查找1.10 销毁链表1.11 输出所有链表元素2.完整代码3.运行截图原创 2022-07-12 10:05:53 · 676 阅读 · 4 评论 -
【数据结构】【王道】【数据结构实现】文章目录
数据结构实现文章目录原创 2022-07-11 17:36:20 · 1647 阅读 · 72 评论 -
【数据结构】【王道】【线性表】单链表的实现及基本操作(带头结点)(可直接运行)
1.2 初始化1.3 判空1.4 按位序插入1.5 指定结点后插操作1.6 指定结点前插操作1.7 按位序删除1.8 按位查找1.9 按值查找1.10 表的长度1.11 单链表建立(尾插法)1.12 单链表建立(头插法)1.13 输出所有链表元素2.完整代码3.运行截图............原创 2022-07-11 17:29:13 · 1802 阅读 · 0 评论 -
【数据结构】【王道】【线性表】无头结点单链表的实现及基本操作(可直接运行)
1.2 初始化1.3 判空1.4 按位序插入1.5 指定结点后插操作1.6 指定结点前插操作_11.7 指定结点前插操作_21.8 按位序删除1.9 按位查找1.10 按值查找1.11 表的长度1.12 单链表建立(尾插法)1.13 单链表建立(头插法)1.14 输出所有链表元素2.完整代码3.运行截图.........原创 2022-07-11 17:06:30 · 3001 阅读 · 8 评论 -
【数据结构】【王道】【线性表】顺序表实现及基本操作(可直接运行)
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。...........................原创 2022-07-06 17:06:52 · 714 阅读 · 0 评论