数据结构知识点
chstor
努力学好英语的菜狗
展开
-
树形结构 --- 树和二叉树(day5
408应用题、代码题总结原创 2022-09-14 13:11:35 · 156 阅读 · 0 评论 -
线性表 --- 串KMP(day4
408应用题、代码题总结原创 2022-09-13 11:45:15 · 112 阅读 · 0 评论 -
线性表 --- 栈、队列、特殊数组(day3
408应用题、代码题总结原创 2022-09-12 20:18:15 · 338 阅读 · 0 评论 -
线性表---链式表示(day2
408应用题、代码题总结原创 2022-09-11 16:32:00 · 124 阅读 · 0 评论 -
线性表---顺序表示(day1
408应用题、代码题总结原创 2022-09-10 17:02:57 · 316 阅读 · 0 评论 -
排序 --- 外部排序
数据结构原创 2022-06-20 08:27:00 · 79 阅读 · 0 评论 -
二叉树的非递归遍历 (25分)
基础实验4-2.3 二叉树的非递归遍历 (25分)本题要求用非递归的方法实现对给定二叉树的 3 种遍历。函数接口定义:void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );其中BinTree结构定义如下:typede...原创 2020-04-16 19:17:09 · 4773 阅读 · 2 评论 -
最小堆实现哈夫曼树的构造及哈夫曼编码、解码
最小堆建哈夫曼树测试用例:51 2 3 4 5 #include<stdio.h>#include<stdlib.h>#define MinData -10001typedef struct Heap *MinHeap;typedef struct HTNode *HuffmanTree;struct Heap{ HuffmanTree...转载 2020-04-10 19:26:38 · 1416 阅读 · 0 评论 -
排序的总结
从算法的简单性来看,将七种算法分为两类:简单算法:冒泡、简单选择、直接插入改进算法:希尔、堆、归并、快速原创 2020-04-06 16:50:49 · 93 阅读 · 0 评论 -
基数排序
文章目录 一、基数排序的概念 二、时间复杂度 三、实例演示 一、基数排序的概念二、时间复杂度 三、实例演示原创 2020-04-06 16:42:38 · 147 阅读 · 0 评论 -
归并排序
文章目录 一、 归并排序的思路 二、 代码实现一、 归并排序的思路二、代码实现/*合并两个有序线性表*/itn *B=(int *)malloc((n+1)*sizeof(int));void Merge(int A[],int low,int mid,int high){ for(int k=low;k<=high;k++) B[k]=A[k]; ...原创 2020-04-06 16:37:39 · 257 阅读 · 0 评论 -
选择排序(堆排序、简单选择排序)
文章目录 一、 选择排序思路 二、简单选择排序 三、 堆排序一、 选择排序思路二、简单选择排序/*简单选择排序*/void SelectSort(int A[],int n){ for(int i=0;i<n-1;i++) { int min=i; for(int j=i+1;j<n;j++) { if(A[j]<A[m...原创 2020-04-06 16:34:50 · 254 阅读 · 0 评论 -
交换排序(冒泡、快速)
文章目录 一、 交换排序的思路 二、冒泡排序 三、 四、 一、 交换排序的思路/*交换函数*/void swap(int a[],int i,int j){ int temp=a[i]; a[i]=a[j]; a[j]=temp;}二、冒泡排序/*冒泡排序优化版*/void BubbleSort(){ int i,j; int f...原创 2020-04-06 15:26:12 · 205 阅读 · 0 评论 -
插入排序
文章目录 一、直接插入排序 二、折半插入排序 三、希尔排序 四、 五、 六、 七、 八、 一、 直接插入排序/*直接插入排序*/void InsertSort(int A[],int n){ int i,j; for(i=2;i<=n;i++){ A[0]=A[i]; for(j=i-1;A[0]<...原创 2020-04-05 21:20:33 · 113 阅读 · 0 评论 -
排序的基本概念
文章目录 一、 排序 二、排序的稳定性 三、内排序和外排序 一、 排序 二、排序的稳定性三、内排序和外排序原创 2020-04-05 21:14:50 · 144 阅读 · 0 评论 -
散列表(哈希表)
文章目录 一、散列表基本概念 二、 散列函数的构造方法 三、 处理散列冲突的方法一、 散列表基本概念 散列技术:散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。我们把对应关系f称为散列函数,又称为哈希函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表。散列...原创 2020-04-05 10:59:36 · 123 阅读 · 0 评论 -
顺序表、有序表、分块、B、B+查找
文章目录 一、查找的基本概念 二、 两种查找表 三、顺序表查找 四、有序表查找 五、分块查找 六、B(B-tree)树 七、B+树: 一、 查找的基本概念查找表:由同一类型的数据元素构成的集合。关键字:数据元素中某个数据项的值。查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。平均查找长度:二、两种查找表...原创 2020-04-05 09:36:39 · 569 阅读 · 0 评论 -
拓扑排序、关键路径
文章目录 一、 拓扑排序 二、 关键路径一、 拓扑排序 AOV网:在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网。 AOE网:在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网。什么是拓扑排序:拓扑排序:其实是对一个有向图构造拓扑序列的过程时间...原创 2020-04-03 22:25:55 · 350 阅读 · 0 评论 -
(Dijkstra)和(Floyd)最短路径两种算法
文章目录 一、路径的概念 二、Dijkstra算法解决单源 三、Floyd算法解决多源一、路径的概念: 考虑带权有向图,把一条路径(仅仅考虑简单路径)上所经边的权值之和定义为该路径的路径长度或称带权路径长度二、迪克斯特拉(Dijkstra)算法解决单源:需要解决的带权有向图的最短路径问题:三、弗洛伊德(Floyd)算法:...原创 2020-04-03 19:01:20 · 511 阅读 · 0 评论 -
(Prim)和(Kruskal)最小生成树的两种算法
文章目录 一、生成树的概念 二、最小生成树的概念 三、普里姆算法(Prim)构造最小生成树 四、 克鲁斯卡尔算法(Kruskal)构造最小生成树一、生成树的概念:一个连通图的生成树是一个极小连通子图,它含有图中全部n个顶点和构成一颗树的(n-1)条边。 可以用深度优先遍历、广度优先遍历生成树:二、最小生成树的概念:对于带权连通图G(每条边上的权均为大...原创 2020-04-03 16:25:20 · 1033 阅读 · 0 评论 -
图的两种遍历(DFS和BFS)
文章目录 一、深度优先遍历(DFS) 二、邻接矩阵的深度优先递归算法与遍历操作 三、 领接表的深度优先递归算法与遍历操作 四、广度优先遍历 五、邻接矩阵的广度遍历算法 六、 邻接表的广度遍历算法一、深度优先遍历(DFS)深度优先遍历也成为深度优先搜索,简称DFS(Depth First Search)从图中某个顶点v出发,访问此顶点,然后从v的未...原创 2020-03-30 21:40:34 · 2578 阅读 · 0 评论 -
单链表结点删除 (20分)
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:struct ListNode {int data;ListNode *next;};函数接口定义:struct ListNode *readlist();struct ListNode *deletem( struct ListNode *L, int m );函数read...原创 2020-03-30 17:31:34 · 588 阅读 · 1 评论 -
链表的创遍插删(改)
“头结点是头指针指向的结点,首结点是头结点指向的下一个结点。头结点无数据域,首结点有数据域。头结点(无数据域)**学习链表首先会创建吧:**List Read(){ struct Node *p = (struct Node*)malloc(sizeof *p), *head=p; int n; scanf("%d", &n); for (i...原创 2020-03-30 17:30:35 · 152 阅读 · 1 评论 -
学习链表的必备知识
Typedef的作用:声明新的类型名来代替原有的类型名比如,typedef int INTERGER; 或 typedef float REAL;相当于用INTERGER来代表int类型,用REAL来代表float习惯上把用typedef声明的类型用大写字母表示1)以下语句声明了了一个名为 PtrToNode 的类型,该类型是指向结构体 Node 的指针。typedef struct ...原创 2020-03-30 17:29:13 · 163 阅读 · 0 评论 -
图的存储结构
文章目录 一、 邻接矩阵 二、 邻接矩阵的主要特点 三、邻接链表 四、 邻接矩阵的建立 五、 邻接链表的建立一、邻接矩阵 用两个数组来表示图。一个一位数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。举例:无向图和有向图的对比无向图邻接矩阵对称但有向图的邻接矩阵不一定都不对称二、邻接矩阵的主要特点:一个图的邻接矩阵表示...原创 2020-03-30 14:03:32 · 212 阅读 · 0 评论 -
图的基本概念
文章目录 一、为什么要引入图 二、图的定义 三、有向图和无向图 四、有向完全图和无向完全图 五、稀疏图、稠密图、图的权、环、网、子图 六、 连通图与连通分量 七、 图的定义与术语的总结: 八、 图的抽象数据类型:一、为什么要引入图1、线性表中,数据元素是串起来的,前驱后继2、树形结构中,有这明显的层次关系,但只能是和上一层中的元素有...原创 2020-03-29 19:27:01 · 1615 阅读 · 0 评论 -
哈夫曼树(编码)
文章目录 一、为什么要引入哈夫曼树 二、哈夫曼树的概念 三、哈夫曼树的构造 四、 哈夫曼树的特点 五、哈夫曼编码 六、 二叉树用于编码一、为什么要引入哈夫曼树压缩文件的时候,为了减少不必要的空间,并且使保存和传递都更加高效。于是,介绍最基本的压缩编码方法------哈夫曼树二、哈夫曼树的概念 路径:从树中一个结点到另一个结点之间的分支构成的路...原创 2020-03-29 16:44:33 · 1262 阅读 · 0 评论 -
先由前序和中序确定二叉树,然后再反转二叉树
(选做题)给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔...原创 2020-03-28 13:13:36 · 2171 阅读 · 1 评论 -
队列层次建立二叉树
/*利用顺序队列,层次建立二叉树*/#include<stdio.h>#include<stdlib.h>#define MAXSIZE 1000typedef struct TNode{//树的数据结构 char data; struct TNode *lchild,*rchild;}*BinTree;typedef struct QNode{ //队列的...原创 2020-03-27 23:02:07 · 2753 阅读 · 2 评论 -
数据结构---平衡二叉树
文章目录 一、为什么引入平衡二叉树 二、平衡二叉树:(AVL树) 三、平衡二叉树的分析与调整 四、 平衡二叉树的实现 五、 六、 七、 一、为什么引入平衡二叉树效率高!对比:二、平衡二叉树:(AVL树) 空树,或者任一结点左、右子树高度差的绝对值不超过1平衡二叉树,也被称为高度平衡树。相比于”二叉查找树”,它的特点是:AVL树...转载 2020-03-28 14:56:19 · 1137 阅读 · 0 评论 -
数据结构---堆
文章目录 一、堆的两个特性 二、区分最大堆和最小堆 三、堆的抽象数据类型描述 这里举例用最大堆,最小堆同理 四、最大堆的建立 五、最大堆的插入 六、最大堆的删除 七、最大堆的打印 一、堆的两个特性结构性:用数组表示的完全二叉树有序性:任一结点的关键字是其子树所有结点的最大值或最小值 二、区分最大堆和最小堆 最大堆:最大值(...原创 2020-03-24 22:00:31 · 329 阅读 · 0 评论 -
线索二叉树
文章目录 一、线索二叉树的概念 二、线索二叉树结构的实现 三、 四、 五、 六、一、线索二叉树的概念线索:指向前驱和后继的指针线索链表:加上线索的二叉链表线索二叉树:加上线索的二叉树(相当于一个双向链表)线索化:对二叉树以某种次序遍历使其变为线索二叉树的过程我们在每个结点新增设两个标志域:Ltag和rtag分别用来指向前驱和后继...原创 2020-03-24 16:22:53 · 449 阅读 · 0 评论 -
二叉搜索(排序或查找)树
文章目录 一、二叉搜索树概念 二、二叉排序树的查找 三、 二叉排序树的最值 四、二叉排序树的插入 五、二叉排序树的删除 六、二叉排序树的打印一、二叉搜索树概念 二叉搜索树:也叫二叉排序树或二叉查找树,是一种对排序和查找都很有用的特殊二叉树它是一颗特殊的二叉树,可以为空树,若不空,则①非空左子树的所有结点的值小于其根节点的值②非空右子树的所...原创 2020-03-23 21:51:46 · 361 阅读 · 0 评论 -
关于二叉树遍历与计算二叉树高度和输出叶节点
文章目录 一、二叉链表 二、二叉树的遍历方法 三、二叉树遍历的性质(利用此性质来判断二叉树是否确定) 四、计算二叉树的高度 五、输出叶节点 一、二叉链表 顺序链表适用性不强,直接链表二叉链表:一个数据域和两个指针域二叉链表的结构:typedef char TElemType;typedef struct BiTNode{ TE...原创 2020-03-20 22:36:31 · 1617 阅读 · 0 评论 -
树与二叉树的基本知识点
文章目录 一、树 二、二叉树 三、树和二叉树的2个主要差别与二叉树的特点 四、特殊的二叉树 五、二叉树的性质 一、树 树是n(n>=0)个结点的有限集。n=0为空树当n>1时,结点分为m个互不相交的有限集,每一个集合又是一棵树,称为根的子树。n>0时,根节点唯一m>0时,子树个数没有限制,但是它们一定是互不相交的!结点...原创 2020-03-20 18:06:16 · 684 阅读 · 0 评论 -
链表的增删改查(遍历)
“头结点是头指针指向的结点,首结点是头结点指向的下一个结点。头结点无数据域,首结点有数据域。头结点(通常无数据域)**学习链表首先会创建吧:**有头结点List Read(){ struct Node *p=(struct Node*)malloc(sizeof(struct Node)),*head=p; int n; scanf("%d",&n); for(i...原创 2020-03-17 20:07:41 · 109 阅读 · 0 评论 -
关于链表的知识点
Typedef的作用:声明新的类型名来代替原有的类型名比如,typedef int INTERGER; 或 typedef float REAL;相当于用INTERGER来代表int类型,用REAL来代表float习惯上把用typedef声明的类型用大写字母表示1)以下语句声明了了一个名为 PtrToNode 的类型,该类型是指向结构体 Node 的指针。该类型是指向结构体 Node 的...原创 2020-03-17 20:06:06 · 159 阅读 · 0 评论 -
树和二叉树的知识点
1、树的基本概念 结点的度(Degree):一个结点的度是其子树的个数。树的度:树的所有结点中最大的度数。叶结点(Leaf):是度为0的结点;叶结点也可称为端结点。父结点(Parent):有子树的结点是其子树的根结点的父结点。子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点;子结点也称孩子结点。兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点...原创 2020-03-16 16:27:25 · 234 阅读 · 0 评论 -
数组堆栈和链栈
数组堆栈#include<stdio.h>struct SNode{ struct SNode *Data; int top; int MaxSize;};typedef struct SNode *Stack;Stack CreateStack( int MaxSize ){ Stack S=(struct SNode *)malloc(sizeof(struct...原创 2020-03-13 22:57:22 · 137 阅读 · 0 评论