-
【数据结构】线性表(链表实现)
所属栏目:[安全] 日期:2020-12-15 热度:61
#ifndef __CHAIN_H__#define __CHAIN_H__#include iostreamusing namespace std;//VS平台下自己定义了nullptr = null = 0//但是在gcc下没有定义#ifndef nullptr#define nullptr 0#endif/*链表的节点元素类*/template class Tclass ChainNode{public:T data;/[详细]
-
《数据结构》2.1递增链表的合并
所属栏目:[安全] 日期:2020-12-15 热度:168
2.1递增链表的合并 题目描述: 设计一个算法将两个递增链表合并成一个递增链表,仍使用原来的存储空间,不 申请新的存储空间,且新表中不能有重复元素。 假设要合并的两个链表的元素都是一次递增的。 算法思想: 设立三个指针pa,pb,pc,其中pa,pb执行LA,和LB[详细]
-
《数据结构》2.3求两个递增链表的交集
所属栏目:[安全] 日期:2020-12-15 热度:173
2.3求两个递增链表的交集 题目描述: 已知两个链表A和B,分别表示两个集合,A和B的元素是递增的。设计一个算法求两个集合的交集,要求使用原来的存储空间。 算法思路描述: /*算法思想:假设两个表分别是L1和L2,表的元素递增排列;需要3个指针,pa,pb,pc.[详细]
-
【数据结构】红黑树基础
所属栏目:[安全] 日期:2020-12-15 热度:93
1、红黑树 红黑树是一种自平衡二叉搜索树,在实际应用中有很广泛的用途。 STL 中的 set,multiset,map,multimap 的底层均是由红黑树实现的。 红黑树有一下 4 个特性: (根据后面的例子看以下几个特性) 1 、红黑树中的每一个节点不是黑色就是红色; 2 、根节[详细]
-
《数据结构》2.4求两个递增链表的差集
所属栏目:[安全] 日期:2020-12-15 热度:141
2.4求连个递增来表的差集 题目描述: 已知A和B表是两个集合,其元素的值递增排列;设计一个算法,求A和B的差集, (即出现在A中但是不在B中) 结果放在A中,同时返回元素的个数。 算法思想: 需要设置三个指针,pa,pb,pc;初始时,pa指向L1的第一个结点,pb[详细]
-
《数据结构》将一个带头结点的单链表分解成两个单链表
所属栏目:[安全] 日期:2020-12-15 热度:135
将一个带头结点的单链表分解成两个单链表 题目描述: /* 设计一个算法,将一个带头结点的单链表分解成两个具有相同结构的 链表B和C,其中B白哦的结点为A中小于0的结点,C表的结点为A中大于0 的结点, 要求B和C 仍利用A表的结点。 (A表的元素都是非0元素) */[详细]
-
【数据结构】关于二分法
所属栏目:[安全] 日期:2020-12-15 热度:68
二分法 例: 假设有一个容量为n+1开始的数组,从小到大存储了n个数(从下标1开始存储)。给定给定数m,求出数组中值为m的元素的下标,如果未找到则返回0。 分析: 以11个数进行分析。 首先令左边界为 l e f t = 1 ,右边界为 r i g h t = 11 , m i d = ( l e f[详细]
-
【数据结构】【C++】二叉树的建立和先序遍历----(1)
所属栏目:[安全] 日期:2020-12-15 热度:180
今晚搞清楚了二叉树的建立和先序遍历,不过现在已经是0:32了,该睡觉了,贴上代码,明天补充细节,加油,晚安! ==============分割线===================== #includeiostream #include malloc.h #includestdio.h using namespace std ; struct node{ int da[详细]
-
【数据结构】二叉树结点插入和前序、中序、后序遍历的递归实现
所属栏目:[安全] 日期:2020-12-15 热度:196
1.二叉树结点定义 struct node{ int data; //int可换成其他的数据类型 struct node* left; struct node* right;}; 每一个二叉树结点都有一个数据域,一个左指针和一个右指针。叶子结点的左指针和右指针均为NULL。 2.结点插入操作 结点插入可以分为两个操作,[详细]
-
《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要
所属栏目:[安全] 日期:2020-12-15 热度:100
2.10 设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1) 算法思想: 设置两个指针,分别而从表的头和尾开始遍历,当遇到值为item的元素时,将右端 的uansu和左端的元素值交换。 void Delete(List L,int item){int i=1[详细]
-
【数据结构】搜索二叉树的相关操作
所属栏目:[安全] 日期:2020-12-15 热度:157
1.查找最小元素 方法1: Position FindM in (B in Tree BST){ if (!BST) return NULL; else if (!BST-left) return BST; else return FindM in (BST-left); } 方法2: int minValue(struct node * node){ struct node * current = node; while (current - le[详细]
-
【数据结构】二叉树的翻转递归与非递归实现
所属栏目:[安全] 日期:2020-12-15 热度:78
二叉树的翻转也是递归的过程,左子树转到右子树,右子树转到左子树。假设有这样的一棵二叉树: 它翻转后应该是这样子的: 代码实现: package 二叉树.翻转;import java.util.LinkedList;class BitNode{//声明一颗树的节点char data;BitNode LChild;BitNode R[详细]
-
《数据结构》交换双向循环链表的结点p和它的前驱结点
所属栏目:[安全] 日期:2020-12-15 热度:188
2.9交换双向循环链表的结点p和它的前驱结点 题目描述: 已知p指向双向循环链表中的一个结点,其结点结构为data,prior,next三个域; 写出算法change(p),交换p所指向的结点及其前驱结点的顺序。 交换算法: void Change(LinkList p){struct DLnode *q;q=p-prio[详细]
-
【后缀自动机】【SAM】【自动机】【数据结构】后缀自动机理解(
所属栏目:[安全] 日期:2020-12-15 热度:161
引入 来吧后缀自动机 我们先来看一看后缀数组可以干一些什么事情 1.可以查看当前后缀在所有后缀的排名 2.可以看最大的相同子串 但是缺点呢却也非常的明显——显然这 tm 是个静态的。。。。 于是只好另辟蹊径——后缀自动机 我们来看看后缀自动机可以干一些什[详细]
-
【AC自动机】【数据结构】【树】【Aho-Corasick automation】AC
所属栏目:[安全] 日期:2020-12-15 热度:147
引入 我们首先提出一个问题: 给出n个串每个串的长度 ≤ m 然后给出一个长度为k的串,询问前n个串中有多少个是匹配成了的 暴力搜索 这题不是sb题目吗? 随随便便O(kmn)跑过。 。。。。 n=10000 m=50 k=1000000 。。。。 好吧——我们用AC自动机吧 样例 首先[详细]
-
【数据结构】对称矩阵及对称矩阵的压缩存储
所属栏目:[安全] 日期:2020-12-15 热度:160
对称矩阵: 设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 = i = N-1 0 = j = N-1),则矩阵A是对称矩阵。以矩阵的对角线为分隔,分为上三角和下三角。 如下面矩阵: 650) this.width=650;" src="http://img.jb51.cc/vcimg/static/loading.png" st[详细]
-
【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的转置
所属栏目:[安全] 日期:2020-12-15 热度:139
在矩阵中,有一类很重要的矩阵,就是-----稀疏矩阵。 所谓的稀疏矩阵呢,就是指的是,在矩阵中,有效的数据个数远远小于无效的数据个数 (并且这些数据排列顺序没有规律) 。我们下面先举个稀疏矩阵的例子: 650) this.width=650;" src="http://img.jb51.cc/[详细]
-
【数据结构】广义表的默认成员函数、深度、大小、打印
所属栏目:[安全] 日期:2020-12-15 热度:185
广义表的定义: 广义表是非线性的结构,是n个元素的有限序列。 650) this.width=650;" src="http://img.jb51.cc/vcimg/static/loading.png" title="QH9)KK58]{[O5`QBH`NW`7N.png " alt="wKiom1cTUC7RB4CcAAAw4q17T88241.png" src="http://s4.51cto.com/wyfs0[详细]
-
【数据结构】二叉树的实现(如:默认成员函数、(叶子)节点数、
所属栏目:[安全] 日期:2020-12-15 热度:54
二叉树:树的每个节点最多有两个子节点。 我们看下它的结构,有二叉链表结构与三叉链表结构,具体结果如我摘自《C++Primer》中的图。 650) this.width=650;" src="http://img.jb51.cc/vcimg/static/loading.png" title="1)5$U{BD13Y4V%A9FL%%7RJ.png" alt="w[详细]
-
【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法
所属栏目:[安全] 日期:2020-12-15 热度:67
对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对 于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都[详细]
-
【数据结构】线索化二叉树中序线索化的递归写法和非递归写法
所属栏目:[安全] 日期:2020-12-15 热度:136
二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。 为了保存这种在遍历中需要的信息,我们利用二叉[详细]
-
【数据结构】堆的实现(包括:默认成员函数,插元素push,删元素p
所属栏目:[安全] 日期:2020-12-15 热度:101
在数据结构里,堆是一类很重要的结构。堆结构是一组数组对象,我们可以把它当作是一颗完全二叉树。 最大堆:堆里 每一个 父亲节点大于它的子女节点。 最小堆:堆里 每一个 父亲节点小于它的子女节点。 如图就是一个最大堆: 650) this.width=650;" src="http:[详细]
-
【数据结构】堆的实现以及简单的函数
所属栏目:[安全] 日期:2020-12-15 热度:113
堆是什么?刚接触到这个概念估计都摸不着头脑,不知道堆是什么样个东西。简单介绍下, 堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。 堆结构的二叉树存储有两种情况: (1).最大堆:每个父节点的都大于孩子节点。 (2).最小堆:每个父节点的都[详细]
-
【数据结构】优先级队列的实现
所属栏目:[安全] 日期:2020-12-15 热度:146
建立PriorityQueue.hpp: #define_CRT_SECURE_NO_WARNINGS1#includeiostreamusingnamespacestd;#includeassert.h#includevectortemplateclassTstructLess{booloperator()(constTl,constTr){returnlr;}};templateclassTstructGreater{booloperator()(constTl,[详细]
-
【数据结构】找出N个数据中最大的前k个数据(利用堆排序)
所属栏目:[安全] 日期:2020-12-15 热度:108
我们举例,假若从10000万个数里选出前100个最大的数据。 首先我们先分析:既然要选出前100个最大的数据,我们就建立一个大小为100的堆(建堆时就按找最大堆的规则建立,即每一个根节点都大于它的子女节点),然后再将后面的剩余数据若符合要求就插入堆中,不[详细]