![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
code-016
有问题请私信,停更一段时间。
展开
-
【数据结构】第五章 树与二叉树
【数据结构】第五章 树与二叉树原创 2023-04-23 22:26:37 · 852 阅读 · 0 评论 -
【数据结构】第四章 串
KMP算法的优化就是对next数组进行优化 并使用nextval作为新的模式串的回退数组,进而达到优化KMP算法,详细优化思想如下//对next数组进行优化->生成nextval数组 void GetNextVal(char * str , int len , int * next , int * nextval) {j原创 2023-03-29 12:05:30 · 78 阅读 · 0 评论 -
【数据结构】第三章 栈 队列和数组
数据结构 第三章 栈 队列和数组原创 2023-03-28 16:51:23 · 383 阅读 · 0 评论 -
【数据结构】第二章 线性表
数据结构 第二章 线性表原创 2023-02-10 18:44:22 · 739 阅读 · 0 评论 -
【数据结构】第一章 绪论
【数据结构】第一章 绪论。原创 2023-01-17 20:14:30 · 534 阅读 · 0 评论 -
【数据结构】并查集
文章目录一、引言二、C++实现三、测试一、引言并查集的相关介绍二、C++实现#include<iostream>using namespace std;class Ufset{private: int* parent; size_t size; //parent对象的个数private: void Showchild(int child)const { cout << child << " "; for (int i = 0; i原创 2022-05-29 18:14:17 · 111 阅读 · 0 评论 -
【数据结构】B/B-树(目录树)
引言关于B树的性质一、B树的结构二、B树的实现#include<iostream>using namespace std;#if 1//5分支Btree#define M 5 //奇数#define MAXSIZE (M-1) //最多元素个数#define MINSIZE (M/2) //最少元素个数 //B树class Btree{public: //关键码类型 using KeyType = char; //元素类型 typedef struct原创 2022-05-27 17:37:39 · 692 阅读 · 0 评论 -
【数据结构】字典树T树
文章目录为什么需要字典树?字典树的实现原理数据结点的设计为什么需要字典树?实现类似搜索引擎的效果,当输入“西安”关键字时,下面出现的联想词(如下图)字典树的实现原理数据结点的设计...原创 2022-05-21 20:56:51 · 304 阅读 · 0 评论 -
【数据结构】AVL树的搭建及插入结点
文章目录一、实例(1)AVL初始状态(2)不失平衡的插入(3)失去平衡的插入二、构建过程分析(1)大体流程(2)具体函数功能1. insert2. PassBalance函数3. LeftBalance函数一、实例我们通过一个实例来说明整个结点的插入导致失衡的过程(1)AVL初始状态(2)不失平衡的插入(3)失去平衡的插入我们在(2)的基础上增加了以下两种情况注意: 上图的结点的平衡因素只设置了一部分二、构建过程分析(1)大体流程(2)具体函数功能1. insert该函数的主原创 2022-03-28 23:13:25 · 533 阅读 · 3 评论 -
【数据结构】AVL树(二叉搜索平衡树)
文章目录一、引入AVL树二、AVL树的要求三、AVL树结构设计四、单分支左旋(1)单分支左旋三大关键步骤(2)单分支左旋完整过程(3)单分支左旋代码五、单分支右旋(1)单分支右旋代码六、双分支旋转一、引入AVL树AVL树是二叉搜索树的升级版,是为了优化整个二叉树的结构并且提高查找速率的一棵特殊的二叉搜索树。平衡二字体现了该树会对插入/删除的结点后进行自动“平衡”(通过旋转进行实现)。二、AVL树的要求平衡状态: 当前结点的右子树深度 - 左子树深度 == -1 or 0 or 1三、AV原创 2022-03-27 22:44:49 · 723 阅读 · 0 评论 -
【数据结构】二叉排序树
文章目录一、关于二叉排序树二、二叉排序树结构设计三、二叉排序树的使用(1)申请节点(2)插入节点(3)找第一个结点(最小值)(4)找最后一个结点(最大值)(5)找后一个结点(较大者)(6)找前一个结点(较小者)(7)非递归中序遍历(8)非递归逆中序遍历(9)清空二叉树(10)查找val(11)删除val(12)测试一、关于二叉排序树二叉排序树的特点:中序遍历的顺序是有序的。中序遍历结果:12 16 23 35 42 60逆中序遍历结果:60 42 35 23 16 12二、二叉排序树结构设计B原创 2022-03-22 16:57:18 · 139 阅读 · 0 评论 -
【数据结构】二叉树的使用
文章目录寻找双亲结点查找val值二叉树空间释放计算二叉树结点个数计算二叉树的深度水平遍历(层次)Z型遍历判断是否是满二叉树判断是否是完全二叉树寻找双亲结点//查找双亲BtNode* FindParent(BtNode* root, BtNode* pos){ if (root == NULL || pos == NULL) return NULL; if (root->leftchild == pos || root->rightchild == pos) { return原创 2022-03-22 16:21:30 · 91 阅读 · 0 评论 -
【数据结构】二叉树的遍历
文章目录一、递归遍历(1)先序(2)中序(3)后序二、非递归遍历(1)先序(2)中序(3)后序三、其他结构遍历(1)非递归中序(2)非递归后序一、递归遍历二叉树结构:typedef char Element;//二叉链式树节点typedef struct BtNode{ Element data; //数据域 struct BtNode* leftchild; //左孩子 struct BtNode* rightchild; //右孩子}BtNode, *BinaryTree;原创 2022-03-22 16:10:33 · 288 阅读 · 0 评论 -
【数据结构】智能指针管理二叉树
文章目录二叉树结构完整代码二叉树结构#ifndef BINARY_TREE_H#define BINARY_TREE_H#include <iostream>#include<memory>using namespace std;typedef char Element;//二叉链式树节点typedef struct BtNode{ Element data; //数据域 struct BtNode* leftchild; //左孩子 struct B原创 2022-03-22 16:03:52 · 424 阅读 · 0 评论 -
【数据结构】二叉树的创建
文章目录二叉树的创建与遍历创建方式一创建方式二:先序+中序创建方式三:中序+后序二叉树的创建与遍历以下图的二叉树为例:Binary_Tree.h#ifndef BINARY_TREE_H#define BINARY_TREE_Htypedef char Element;//二叉链式树节点typedef struct BtNode{ Element data; //数据域 struct BtNode* leftchild; //左孩子 struct BtNode* right原创 2022-03-20 17:23:29 · 3115 阅读 · 0 评论 -
一、C语言实现顺序表的基本功能
一、顺序表原创 2021-03-09 18:38:54 · 459 阅读 · 2 评论 -
二、C语言实现头结点的单链表
二、C语言实现头结点的单链表1、头结点单链表(逻辑图)2、声明#pragma once//结构声明typedef int DataType;//结点声明typedef struct Node{ union //采用联合体的形式,开辟结点时二选一 { DataType data; //普通节点存储数据 int length; //头结点存储单链表的长度 }; struct Node* next; //定义指向下一个结点的指针}Linklist;.原创 2021-03-10 15:51:56 · 420 阅读 · 0 评论 -
三、C语言实现头指针的单链表
三、C语言实现头指针的单链表原创 2021-03-28 18:14:15 · 431 阅读 · 0 评论 -
四、C语言实现双向链表
四、C语言实现双向链表1、定义:双向链表就是在单链表的基础上,增加了一个prior指针域,用来指向直接前驱,同时首结点的prior域需置空,尾结点的next域置空;2、初始化时逻辑图这里将头结点的data域换成了length,用于存储链表的结点个数;3、插入操作假设pos为2,先定义一个指针p指向head结点,用pos作为循环条件,找到pos位置的前驱结点;接着插入,让新结点的next指向p的后继结点,新结点的prior指向p,这样新结点的两个指针就安排好了;接着继续链接p原创 2021-03-29 23:11:18 · 460 阅读 · 0 评论 -
五、C语言实现双向循环链表
五、C语言实现双向循环链表1、逻辑图2、初始化3、关于插入位置的处理4、插入操作插入操作:无需特殊考虑是头插还是尾插,别忘了head->length++;5、删除操作同理,删除操作也无需考虑头、尾删除操作,也别忘了head->length- -;6、声明在这里插入代码片7、方法实现在这里插入代码片8、主函数测试在这里插入代码片9、测试结果...原创 2021-03-30 13:25:22 · 277 阅读 · 0 评论 -
六、C语言实现栈的基本功能
六、C语言实现栈的基本功能1、栈的原则:先进后出,后进先出2、声明#pragma once//结构声明typedef int Element;typedef struct Stack{ int size; //栈容量 int top; //栈顶下标 Element* stack_low; //栈底指针}Stack,*PStack; //PStack可用来定义指针类型的栈//栈扩容bool ApplyNe原创 2021-03-31 13:49:34 · 558 阅读 · 0 评论 -
七、C语言实现循环队列的基本功能
七、C语言实现循环队列的基本功能1、逻辑图2、声明//结构声明typedef int ElemType;typedef struct queue{ int head; int rear; int size; ElemType *data;}Queue;//方法声明//初始化队列void InitQueue(Queue *que,int init_size);//判空bool IsEmpty(Queue *que);//判满bool IsFull(Queue原创 2021-04-01 13:21:10 · 392 阅读 · 0 评论 -
八、哈希Hash
哈希逻辑结构图:代码实现:声明:#define SIZE 13typedef int KeyData;typedef int DataType;typedef struct Node{ DataType data; struct Node *next;}Linklist;typedef struct Hash{ Linklist *keytable[SIZE]; //结点类型的指针数组 KeyData nodecount[SIZE]; //存储结点个数}Hash原创 2021-04-18 14:34:03 · 252 阅读 · 0 评论