随笔分类 -  数据结构

1
摘要:堆 堆的概念 堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象,即是一种顺序储存结构的完全二叉树。1 提示:完全二叉树 完全二叉树:对一棵深度为k、有n个结点二叉树编号后,各节点的编号与深度为k的满二叉树相同位置的结点的编号相同,这颗二叉树就被称为完全二叉 阅读全文
posted @ 2022-04-09 15:57 CairBin 阅读(557) 评论(0) 推荐(0) 编辑
摘要:并查集 说明 并查集是一种精巧使用的数据结构,主要用于处理一些不相交的集合合并问题。经典的例子有连通子图、最小生成树Kruskal算法和LCA等。 原理 将编号分别为1~n个对象分为不相交的集合,每个集合中,选择其中某个元素代表所在的集合。在这个集合中,并查集的操作有初始化、合并、找查。 步骤 初始 阅读全文
posted @ 2022-04-03 18:45 CairBin 阅读(49) 评论(0) 推荐(0) 编辑
摘要:二叉树及其遍历 二叉树概念定义 什么是二叉树 二叉树特点是每个节点最多只能有两棵子树,且有左右之分的树。 注:关于数据结构——树的一些基本概念可以参考《树的概念及基本术语》 - CairBin's Blog 二叉树的基本性质 关于二叉树的基本性质前面已经写的很详细了,可以回顾文章《二叉树》 - Ca 阅读全文
posted @ 2022-03-07 01:32 CairBin 阅读(63) 评论(0) 推荐(0) 编辑
摘要:DFS与N皇后问题 DFS 什么是DFS DFS是指深度优先遍历也叫深度优先搜索。 它是一种用来遍历或搜索树和图数据结构的算法 注:关于树的一些知识可以去看《树的概念及基本术语》这篇文章 它会不断地沿着节点的深度方向(该深度方向为其邻接点的方向)进行遍历 DFS如何实现 DFS主要步骤有以下几步 访 阅读全文
posted @ 2022-03-06 12:10 CairBin 阅读(75) 评论(0) 推荐(0) 编辑
摘要:队列 队列的定义 队列简称队,是一种受限制的线性表,仅允许在表的一端插入,在表的另一端进行删除。 进行插入的一端叫做队头 进行删除的一端叫做队尾 队的特点 **先进先出(FIFO) ** 顺序队(循环队列) 顺序队主要以循环队列的形式出现 循环队列的要素 队空状态 qu.rear == qu.fro 阅读全文
posted @ 2021-12-18 18:17 CairBin 阅读(146) 评论(0) 推荐(0) 编辑
摘要:二叉树 二叉树的定义 二叉树在一般的树上加了两个限制条件: 每个结点最多只有两个子树 子树有左右之分,不能颠倒 二叉树的形态 空二叉树 只有根结点 只有左子树,右子树为空 只有右子树,左子树为空 既有左子树,又有右子树 满二叉树、完全二叉树以及非完全二叉树 满二叉树:所有的分支结点都有左、右子节点, 阅读全文
posted @ 2021-11-21 15:41 CairBin 阅读(466) 评论(0) 推荐(0) 编辑
摘要:串 串的定义 概念 串是由零个或多个字符数组组成的有限序列。 串中字符的个数称为串的长度,含有零个元素的叫空串。 串是限定了元素为字符的线性表 (注:串与一般的线性表操作有很大区别,线性表主要针对表内的某个元素,而串操作主要针对子串) 代码 在C语言中,一个串可以如下定义,但仅以'\0'作为结束符时 阅读全文
posted @ 2021-11-05 01:20 CairBin 阅读(1060) 评论(0) 推荐(0) 编辑
摘要:树 树的定义 树是一种非线性数据结构,它是若干结点的集合。 是由唯一的根和若干不相交的子树组成的。 子树又是一颗树,因此树的定义是递归的。 树的结点数目可为0,此时称之为空树。 树的基本术语 结点(结点包含数据元素和指向子树的分支) 路径:一个结点和另一个经过的边和结点的序列 根(根结点):一棵树的 阅读全文
posted @ 2021-10-31 16:52 CairBin 阅读(574) 评论(0) 推荐(0) 编辑
摘要:链栈的定义 #include <iostream> using namespace std; //链栈,理论上只要内存够大不存在上溢,只存在下溢(栈空后继续取出元素) typedef struct _QNode { int data; struct _QNode *next; }StNode; 链栈 阅读全文
posted @ 2021-10-10 15:19 CairBin 阅读(54) 评论(0) 推荐(0) 编辑
摘要:栈的定义 #include <iostream> #define MAXSIZE 1000 using namespace std; //顺序栈 typedef struct { int data[MAXSIZE]; //存放栈顶元素 int top; //栈顶指针 }SqStack; 栈的操作 初 阅读全文
posted @ 2021-10-07 21:42 CairBin 阅读(68) 评论(0) 推荐(0) 编辑
摘要:说明 共享双链表意义在于,可以用一套函数维护不同数据类型的双链表 准备 定义双链表 #include <iostream> #include <string> using namespace std; //此处并不包含数据域,仅有指针域用于连接结点 typedef struct _DbLinkLis 阅读全文
posted @ 2021-10-05 14:24 CairBin 阅读(37) 评论(0) 推荐(0) 编辑
摘要:栈的基本概念 栈的定义 栈是一种只能在一端进行插入或删除的线性表。其中插入被称作进栈,删除被称作出栈。 允许进行插入或删除操作的一端被称为栈顶,另一段被称为栈底,栈底固定不变。其中,栈顶由一个称为栈顶指针的位置指示器来指示。 (PS:栈顶指针并非传统意义上的指针,比如顺序栈用的是一个整型变量来指示, 阅读全文
posted @ 2021-09-28 21:40 CairBin 阅读(1197) 评论(0) 推荐(0) 编辑
摘要:双链表的代码定义 #include <iostream> using namespace std; typedef struct _DLNode { int data; //结点数据域 struct _DLNode *next; //指向后继的指针 struct _DLNode *prev; //指 阅读全文
posted @ 2021-09-28 11:43 CairBin 阅读(52) 评论(0) 推荐(0) 编辑
摘要:顺序表应用——逆置问题 问题描述 给定一个顺序表,将其中的元素逆置 例子 给定一个顺序表,其中有0至10共11个元素从小至大排列,请将这11个元素逆置使其从大到小排列 以下是解题代码 代码 #include <iostream> #define MAXSIZE 100 typedef struct{ 阅读全文
posted @ 2021-09-25 11:09 CairBin 阅读(177) 评论(0) 推荐(0) 编辑
摘要:约瑟夫问题 介绍 约瑟夫问题,又称约瑟夫置换、丢手绢问题。 一般形式 (本部分内容来自百度百科) 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。 代码 问题描述 本文以以下问题为例 阅读全文
posted @ 2021-09-18 23:21 CairBin 阅读(82) 评论(0) 推荐(0) 编辑
摘要:循环链表定义 定义与单链表一样,操作时将末结点的指针指向开始结点即可 typedef struct _LinkNode { int data; struct _LinkNode *next; }LinkList; 循环链表操作 初始化循环链表 bool InitList(LinkList* &L) 阅读全文
posted @ 2021-09-18 22:20 CairBin 阅读(523) 评论(0) 推荐(0) 编辑
摘要:单链表代码定义 typedef struct LinkNode { int data; //data存放结点的数据域(以int类型为例) struct LinkNode *next; //结点的指针域 }LinkNode, LinkList; 单链表的操作 初始化单链表 bool initList( 阅读全文
posted @ 2021-09-12 14:05 CairBin 阅读(53) 评论(0) 推荐(0) 编辑
摘要:链表 链表的概念 定义:链表是一种物理存储单元上非连续、非顺序的存储结构,由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。 在链表的储存上,每个结点不仅包含所存的元素信息,还包含元素间的逻辑信息。 链表的特性 不支持随机访问:不能通过知道第一个元素的地址(即储存空间的首地址) 阅读全文
posted @ 2021-08-19 21:37 CairBin 阅读(750) 评论(0) 推荐(0) 编辑
摘要:顺序表的操作 这里先定义个顺序表 #include <iostream> using namespace std; #define MAXSIZE 100 typedef struct{ int *elems; int length; int size; }Sqlist; Sqlist list; 阅读全文
posted @ 2021-08-09 17:43 CairBin 阅读(169) 评论(0) 推荐(0) 编辑
摘要:顺序表 结点的概念 结点 :结点是内存中一片由用户分配的储存空间,只有一个地址来表示它的存在,没有显式名称。 在学习顺序表时,一般不会去特别强调结点的概念,此概念往往在链表学习中涉及,但并不代表结点与顺序表无关,所以我特意把结点的概念放在此处以加深对顺序表的理解。 顺序表的概念 定义:把逻辑上相邻的 阅读全文
posted @ 2021-08-09 14:33 CairBin 阅读(1034) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示