数据结构
Kobe51920
这个作者很懒,什么都没留下…
展开
-
数据结构:c++高级数据算法----》树的创建&树的基本操练
树的基本操练:1.求叶子结点的数目代码://定义全局变量int sum;void CountLeafNum(BiTNode*T){ if( T != NULL) { if(T->child == NULL && T->child == NULL) { sum++; } if(T-&g...原创 2019-12-11 22:45:08 · 218 阅读 · 0 评论 -
数据结构:c++高级数据结构算法-----》树&二叉树的基本特性
树的定义:树是n个结点的有限集。在任意一颗非空树中:(1)有且仅有一个特定的根的结点(2)当n>1,其余结点可分为m个互不相交的有限集合,其中每个集合本身又是一棵树,并且成为子树,如下图所示图中:(a)是只有一个根结点的树;(b)是有13个结点的树,其中A是根,其余结点分成3个互不交集的子集;T1={B,E,F,K,L}T2={C,G}T3={D,H,I,J,M}T1,T2,T3...原创 2019-12-10 20:55:45 · 368 阅读 · 0 评论 -
数据结构:c++高级数据结构:二叉树的创建
二叉树的创建:#方法创建树:3用遍历方法遍历出一颗树。如果叶子节点上是空的话,就补上#号如下图所示:先序遍历:124###3## 中序遍历:#4#2#1#3# 后序遍历:##4#2##31代码实现:BiTNode * CreateBiThrTree(BiTNode * T){ //创建 BiTNode *node = NULL; BiTNode ...原创 2020-01-04 15:14:38 · 210 阅读 · 0 评论 -
数据结构:c++高级数据结构算法-----》二叉树的四种遍历
二叉树的遍历:(traversingbinarytreetraversingbinarytree)是指从根节点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。二叉树的遍历方法:(从左到右)前序遍历 中序遍历 后序遍历 层序遍历前序遍历前序遍历二叉树的操作定义:若二叉树为空,则空操作:否则:(1)访问根结点(2)...原创 2019-12-04 15:13:37 · 398 阅读 · 0 评论 -
数据结构:广义表的深度长度,线性结构与非线性结构
1.广义表的深度与长度https://blog.csdn.net/W_K_L/article/details/789839572.线性结构与非线性结构线性结构:是一个有序数据元素的集合。常用的线性结构有:线性表,栈,队列,双队列,数组,串。其特点是数据元素之间存在一对一的线性关系。(串又称为字符串,是一种特殊的线性表,其特殊性体现在数据元素是一个字符,也就是说串是一种内容受限的线性表。(栈...原创 2019-11-03 21:11:28 · 786 阅读 · 0 评论 -
数据结构:链表与逻辑问题
优点 缺点 链表 1.用多少开多少,直接链上去,没有空间浪费 2.头尾插入效率高 O(1) 不支持随机访问,顺序访问 顺序表 1.支持随机访问,随机访问 1.增容时成倍增长,有空间浪费 2.中间或者头部插入数据时效率不高 O(N) ...原创 2019-08-18 21:49:37 · 2686 阅读 · 0 评论 -
数据结构:队列与栈问题
1.队列与栈(栈有记忆功能,队列删除,插入效率比较低下)1.队列删除元素是在队首进行,队列是现进现出,相对来说,队首元素是最先进入队列的,因此出队应该是在队首进行。队列其实就和我们平时排队一样的2.栈与队列是非线性结构,应该是线性结构,再确切点说是访问受限的线性表线性链表是非线性结构,应该是线性结构二叉树是线性结构,应该是非线性结构(层次结构3.BFS需要...原创 2019-11-03 21:06:50 · 1263 阅读 · 0 评论 -
数据结构:链式栈 不定长顺序栈
栈的概念:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。链式栈:利用带头结点的单链表实现栈只能在栈顶进行操作...原创 2020-01-08 21:46:13 · 289 阅读 · 0 评论 -
数据结构:队列
队列的概念:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,...原创 2020-01-08 21:15:31 · 527 阅读 · 0 评论 -
数据结构:双向链表
双向链表的概念:双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。双向链表的分类:不带头双向链表 带头双向链表示意图:不带头双向链表:详细代码请看:https://blog.csdn.net/yanhuan13667...原创 2020-01-05 19:12:21 · 215 阅读 · 0 评论 -
数据结构:循环链表
循环链表的概念:循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。示意图:代码实现:clist.h#pragma once //循环链表typedef struct CNode{ int data; struct CNode *next;}CNode,*CList; //循环链表初始化void Ini...原创 2020-01-05 18:43:54 · 249 阅读 · 0 评论 -
数据结构:单链表(不带头结点)
nlist.h#pragma once typedef struct NNode{ int data; struct NNode *next;}NNode,*NList; //链表初始化void InitList(NList *pplist); //头插bool Insert_head(NList *pplist,int val); //尾插bool Inse...原创 2020-01-05 17:04:49 · 713 阅读 · 0 评论 -
数据结构:单链表(带头结点)
单链表的概念:(只有一个指针结点)单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。(简单讲就是逻辑相邻,物理不相邻)单链表分类:不带头结点: 带头结点:带头结点:list.h#p...原创 2020-01-05 16:03:21 · 2987 阅读 · 0 评论 -
数据结构:线性表中的顺序表(不定长顺序表)
动态顺序表(不定长顺序表)概念顺序表的容量在动态时期(运行期间)确定,大小可改变。创建typedef struct DSeqList{ int* elem;//指向存储数据的内存 int length;//有效数据个数 int listsize;//总格子数(开辟的总单元个数)}DSeqList,*PDSeqList;dseqlist.hvoid InitS...原创 2020-01-04 19:21:16 · 159 阅读 · 0 评论 -
数据结构:线性表中的顺序表(定长顺序表)
顺序表的概念:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中(简单的讲就是逻辑相邻...原创 2020-01-04 18:13:27 · 507 阅读 · 0 评论 -
数据结构:几大排序算法的总结
算法的分类:常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。相关的概念:稳定:如果a原本在b前面,而a=b,排序之后a仍然在...原创 2020-01-04 15:30:56 · 138 阅读 · 0 评论 -
数据结构:基数排序(Radix Sort)
基数排序的概念:基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的...原创 2020-01-02 18:06:28 · 438 阅读 · 0 评论 -
数据结构:直接选择排序
直接选择排序的概念:直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-...原创 2020-01-04 15:11:05 · 446 阅读 · 0 评论 -
数据结构:堆排序(Heap Sort)
堆排序的概念:堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法描述:将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区; 将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序...原创 2020-01-01 17:10:21 · 327 阅读 · 0 评论 -
数据结构:归并排序(Merge Sort)
归并排序概念:和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列...原创 2020-01-02 17:07:50 · 711 阅读 · 0 评论 -
数据结构:希尔排序(shell)
希尔排序的概念:希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时...原创 2020-01-01 14:40:54 · 380 阅读 · 0 评论 -
数据结构:直接插入排序
直接插入排序的概念:直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表直接插入动态图:实例化例子:在日常生活中,经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。例如:一组从小到大排好顺序的数据列{1,2,3,4,5,6,7,9,10},通常称之为...原创 2019-12-31 15:35:23 · 2254 阅读 · 0 评论 -
数据结构:快速排序
算法的概念:快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。算法描述:快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面...原创 2020-01-02 16:03:10 · 267 阅读 · 0 评论 -
数据结构:冒泡排序
1原创 2019-12-31 14:41:11 · 2775 阅读 · 0 评论