![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
会飞滴熊猫
一个小渣渣的学习日常
展开
-
时间复杂度和空间复杂度浅谈
1. 如何衡量一个算法的好坏?①算法的效率判断一个算法的效率时,往往只需要关注操作次数的最高次项,其他次要项和常数项可以忽略在没有特殊说明时,我们所分析的时间复杂度都是指算法的最坏时间复杂度只有常数记做1操作数量的估算可以作为时间复杂度的估算2. 什么是时间复杂度?时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改...原创 2019-04-27 11:45:52 · 368 阅读 · 0 评论 -
红黑树的创建
红黑树的结点插入cur为当前结点,p为父节点,g为祖父结点,u为叔叔结点情况一cur为红色,p为红色,g为红色,u存在且为红色调整前调整后调整方式:将p结点和u结点调整为黑色,将g结点改为红色将cur指向g结点,将p结点指向cur的p结点,继续向上调整情况二cur为红,p为红,g为黑,u不存在/u为黑调整前调整后调整方式:p为g的左孩子,cur为p的左孩子,则进...原创 2019-08-28 12:59:25 · 831 阅读 · 0 评论 -
C语言实现队列
1.什么是队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。2.队列有什么特性?先进先出,如同现实中的排队3.栈和队列有什么区别?1.删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。2.应用场景不...原创 2019-05-18 10:25:57 · 833 阅读 · 0 评论 -
C语言实现一个动态栈
栈是一种特殊的数据结构,栈是具有先进后出的规则的,所以栈是不能进行遍历的,遵循栈的原则,只进行先进后出栈容器决定这个栈应该放入多少个元素,如果栈容器已经满了,则对栈容器进行扩容扩容五步走:1.开辟新的空间(默认是旧空间的二倍)2.把旧空间的数据拷贝到新的空间3.释放旧空间4.指针指向新的空间5.把栈容器的值改为原来的二倍//头文件#pragma once#include <...原创 2019-05-18 09:16:19 · 583 阅读 · 0 评论 -
排序算法大集合
排序算法大集合1.快速排序//快速排序void Quick_Sort(int* arr, int begain, int end) { int i = begain; int j = end; if (i < j) { int temp = arr[i]; while (i < j) { while (i<j&&arr[j]>te...原创 2019-05-27 12:43:56 · 107 阅读 · 0 评论 -
堆排序算法浅解
堆排序算法浅解1.堆排序即利用堆的思想对堆进行重复的调整,把堆顶的元素放到最后一个节点处,然后调整堆,依次循环直到排序完成#include <iostream>using namespace std;void Swap(int* arr,int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp;...原创 2019-05-25 15:51:25 · 122 阅读 · 0 评论 -
实现可以控制大堆小堆的程序
实现可以控制大堆小堆的程序使用函数指针做函数参数,让用户把想要判断大小的函数传进 函数里面函数指针函数指针做函数参数头文件#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int HPDataType;//写一个函数指针,用来与用户交互...原创 2019-05-25 12:28:46 · 119 阅读 · 0 评论 -
数据结构堆的特性及代码实现一个堆
数据结构堆的特性及代码实现一个堆1.堆的概念如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为 小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,...原创 2019-05-25 10:37:05 · 530 阅读 · 0 评论 -
数据结构--------树
数据结构--------树1.树的基本概念树是n(n>0)个结点的有限集,这个集合满足下面条件:⑴有且仅有一个结点没有前驱(父亲结点)。该结点称为树的根。⑵除根外,其余的每一个结点都有且仅有一个前驱;⑶除根外,每个结点都通过唯一的路径连到根上(否则有环)。2.树的表示方式双亲表示法孩子表示法孩子兄弟表示法3.二叉树的基本概念在计算机科学中,二叉树是每个结点最多有两个子...原创 2019-05-24 16:55:18 · 185 阅读 · 0 评论 -
快速排序
快速排序的效率,已经特别的高,快速排序再与挖坑填数,先取一个基准数,在尾部往前寻找比这个基准数小的数,放在这个基准数的位置,在前往后寻找比这个基准数大的数,放在刚刚挖出来的位置,当循环走完,即(两个边界条件相等)则意味着这个基准数已经排序完毕,开始递归进行排序#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include &l...原创 2019-05-21 09:18:27 · 70 阅读 · 0 评论 -
希尔排序
希尔排序希尔排序像是插入排序的升级版把数组分组以后再进行插入排序分组的次数是:increasement=sizeof(arr)/3+1分组排序以后序列会有一个大致的顺序最后进行全排序#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string...原创 2019-05-07 12:24:54 · 70 阅读 · 0 评论 -
插入排序
插入排序插入排序效率最高的时候是这个序列的元素有基本的顺序(如果是升序排列)即是小数在大多在前面,大数大多在后面.还有就是这个序列的元素不要太多#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <tim...原创 2019-05-07 12:06:37 · 86 阅读 · 0 评论 -
二叉树的非递归遍历
二叉树的非递归遍历个人博客1.思路先序遍历使用栈模型,创建一个结构体维护二叉树的结点,给这个结点一个标记,暂且使用FALSE和TRUE表示,拿到二叉树的根节点,给这个跟结点打上FALSE的标志然后进行压栈,(FALSE即为不打印,TRUE即为打印)把根节点压栈,然后进入循环:①返回栈顶元素②出栈③判断栈顶元素的标志(FALSE或TRUE)④如果栈顶元素的标志位TRUE,直接打印这...原创 2019-05-06 14:26:52 · 76 阅读 · 0 评论 -
单向动态链表
单向动态链表什么是链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性...原创 2019-04-27 16:57:45 · 803 阅读 · 0 评论 -
线性结构
线性结构什么是线性结构线性结构是一个有序数据元素的集合。 [1]常用的线性结构有:线性表,栈,队列,双队列,数组,串。关于广义表,是一种非线性的数据结构。常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等)线性结构包含的内容线性表,栈,队列,串,什么是顺序表,顺序表的分类顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储...原创 2019-04-27 16:50:11 · 535 阅读 · 0 评论 -
二叉树的重建
文章目录1.根据二叉树的中序和后续遍历重建二叉树2.根据二叉树的中序和前序遍历重建二叉树1.根据二叉树的中序和后续遍历重建二叉树思路:假设递归过程中,某一步的后序序列区间为[postL,postR],中序序列区间为[inL,inR];1. 根据后序遍历的特点可知,postR位置为根结点;2. 从中序序列中,寻找出root的位置k,k左边的均为左子树,右边的均为右子树;3. 将左子树区...原创 2019-09-15 10:15:41 · 168 阅读 · 0 评论