数据结构
文章平均质量分 68
一禅的师兄
这个作者很懒,什么都没留下…
展开
-
格雷码与二进制码的准换
格雷码(Graycode)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码,是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷...原创 2021-06-29 10:09:53 · 299 阅读 · 0 评论 -
邻接表的深度遍历(DFS)
https://blog.csdn.net/Achenming1314/article/details/105203878#include <iostream>/** *DFS usage:Refer to the hype data structure */using namespace std;#define maxvertex 100typedef char vertextype; //vertextypedef int Edgetype ; /原创 2020-06-14 16:44:00 · 283 阅读 · 0 评论 -
排序算法总结:
/** *交换数组中的数 * @param arr; * */ void swap(int arr[],int a,int b){ int temp=arr[a]; arr[a]=arr[b]; arr[b]=temp;} /** * @brief 选择排序(从小到大进行排序O(n^2)) * @attention: 简单选择排序是最简单直观的一种算法...转载 2020-04-02 22:31:43 · 81 阅读 · 0 评论 -
图解快速排序
https://blog.csdn.net/pengzonglu7292/article/details/84938910#include <stdio.h>#include <stdlib.h>#include <string.h>void swap(int arr[],int i,int j){ int temp=arr[i]; ...原创 2020-03-13 18:09:22 · 89 阅读 · 0 评论 -
图解数据结构
#include <stdio.h>#include <stdlib.h>#include <string.h>/** * @brief 主要是利用递归让两边均满足有序序列,然后再讲两个有序的序列排序放在在一个临时数组中 * @param arr * @param left * @param right * @param temp */ v...转载 2020-03-13 17:39:51 · 548 阅读 · 0 评论 -
排序之堆排序
1#include <stdio.h>#include <string.h>#include <stdlib.h>void Swap(int arr[],int a,int b);void HeapSort(int arr[],int length);void adjustHeap(int arr[],int i,int length );...原创 2020-03-11 22:40:58 · 97 阅读 · 0 评论 -
数据结构与算法精华帖
https://www.cnblogs.com/jingmoxukong/p/4381343.html转载 2020-01-17 21:17:19 · 93 阅读 · 0 评论 -
前序遍历+中序遍历=》后序遍历
事实上,一个中序遍历的算法中入栈的过程中,如果你把每个入栈的结点保存起来,你会发现这些结点就是先序遍历的结果,同样,出栈就是中序遍历,如下图 核心算法先序遍历的第一个结点一定是根结点,也是后序遍历的最后一个结点,找到它在中序中的位置 i ,那么 i 的左边就是左子树,右边是右子树,递归的求解左右两边 ...原创 2019-12-27 13:00:27 · 167 阅读 · 0 评论 -
双向链表C++实现(具体原理)
具体原理参考大话数据结构:#include<iostream>#include<assert.h>using namespace std;typedef int Datatype;typedef struct Node//链表是由一个个节点组成所以这里单独定义这一类型方便在链表类中使用{ Datatype _data; struct N...转载 2019-11-20 21:59:46 · 354 阅读 · 0 评论 -
C++实现双向链表
https://blog.csdn.net/m0_37806112/article/details/80626545==============================================================================.h#ifndef __MYINCLUDE_#include <stdio.h>#include &l...转载 2019-11-02 23:05:10 · 162 阅读 · 0 评论 -
KMP算法实现验证通过
#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 100/*串结构体*/typedef struct Stirngs{ char string[100]; int length;}sq;/*next数组*///q为子串void GetNext(sq...原创 2019-10-20 19:56:23 · 262 阅读 · 0 评论 -
shell排序
1、知识导入 2 、排序算法: shell 排序 基数排序 桶排序2.1 希尔排序 插入排序: 希尔排序的思路:(1.)插入排序的优化(2)步长:一开始设置为元素的个数/2 (3)步长次序排序:每次排序完,步长减1,每次排序都是以步长为间隔单位给所有元素分组,组内作插入排序。...原创 2019-10-03 15:55:42 · 165 阅读 · 0 评论 -
斐波那契查找原理深入
斐波那契查找原理: 斐波那契查找是一种在有序表中高效查找指定元素的算法,比折半查找要复杂一些,主要复杂在要多做不少准备工作。下面看它的工作流程:1.计算并保存一个斐波那契序列的数组,方便以后取值。数组名记为f,例如f[1]=1,f[2]=1,f[3]=2,f[4]=3,f[5]=5,f[6]=8,f[7]=13,f[8]=212.把有序数组的...原创 2019-08-16 13:26:51 · 2262 阅读 · 2 评论 -
平衡二叉搜索树---红黑树(SET容器的由来)
https://blog.csdn.net/qq_35469756/article/details/79188118(平衡二叉搜索树原理)https://blog.csdn.net/sinat_37158899/article/details/79328104(容器set应用)set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成...转载 2019-07-27 20:06:11 · 153 阅读 · 0 评论 -
堆和栈的区别是什么?
首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”,OC语言是C语言的超集,所以先了解C语言的内存模型的内存管理会有很大的帮助。C语言的内存模型分为5个区:栈区、堆区、静态区、常量区、代码区。每个区存储的内容如下:1、栈区(由高到低):存放函数的参数值、局部变量等,由编译器自动分配和释放,通常在函数执行完后就释放了,其操作方式类似于数据结构中的栈。栈内存分配运算内置于CPU的指令集,效率...转载 2019-08-04 18:39:00 · 102 阅读 · 0 评论 -
字符串(运用广泛)
https://www.bilibili.com/video/av37498689/?p=2学习内容:原创 2019-08-04 18:34:18 · 90 阅读 · 0 评论 -
深拷贝与浅拷贝的区别
参考:https://www.cnblogs.com/echolun/p/7889848.html https://www.cnblogs.com/always-chang/p/6107437.html先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。...转载 2019-06-27 22:19:32 · 65 阅读 · 0 评论 -
数据结构--链表2
今天继续介绍数据结构中的链表这块这块内容,前面介绍了创建数据链表采用头插法,尾插法,今天主要介绍的是有序插法。在介绍有序插法前先进行头插法与尾部插法的总结。新建链表主要有三种方法:头插法,尾插法,有序插法头插法的主要思路:链表为空的时候,新节点变为头结点、尾部节点。链表不为空的时候,新节点的pnext指向原有的头节点,新的节点就会变成头结点。尾插法的主要思路:链表为空的...原创 2018-11-09 12:41:05 · 381 阅读 · 0 评论 -
数据结构链表
数组作为存放数据的集合,可以用来申请内存。但是数组的大小在定义的时候必须事先定义好,一旦定义好在程序中就不能再调整。供大于求,就会内存空间的浪费。我们希望构造动态的数组,随时可以调整数组的大小,用来满足不同问题的需求。链表就是我们需要的动态的数组。他是在时程序执行的过程中根据需要有数据存储,就就向系统要求申请存储空间,不会造成存储区空间的浪费。链表是一种复杂的数据结构。其数据之间的相...原创 2018-11-08 15:12:11 · 154 阅读 · 0 评论 -
线性表的单向存储(单链表完全操作)
参考网址:https://blog.csdn.net/zrx1832/article/details/80753953#include <stdio.h>#include <string.h>#include "stdlib.h"#include "time.h"#define OK 1#define Error 0#define T...原创 2019-02-27 22:48:24 · 172 阅读 · 0 评论 -
快速排序法(C与python 代码实现)
1.概念快速排序,听这个名字就能想到它排序速度比较快方法,是一种分治思想,现在各种语言中自带的排序库很多使用的都是快速排序。快速排序的基本思想是:通过一趟排序将待排记录分为两个独立的部分,其中一部分记录的关键字均比另一部小的,可分别对这两部分记录进行排序,以达到整个序列有序的目的空间复杂度快速排序是一种原地排序,只需要一个很小的栈作为辅助空间,空间复杂度为O(log2n),所以适合在数...原创 2019-02-26 14:46:41 · 144 阅读 · 0 评论 -
数据结构学习网址
http://data.biancheng.net/转载 2019-03-11 17:29:59 · 108 阅读 · 0 评论 -
C++类模板 template
C++在发展的后期增加了模板(template )的功能,提供了解决这类问题的途径。可以声明一个通用的类模板,它可以有一个或多个虚拟的类型参数。比如:1.class Compare_int2.class Compare_float都是比较大小的函数,只是参数类型不同,于是用一个类模版综合成一个函数:按 Ctrl+C 复制代码template <class numtype&...转载 2019-03-11 20:51:17 · 319 阅读 · 0 评论 -
STL---容器入门1
1.容器的概念:概念:用来管理一组元素首先理解一下数据结构:数据结构研究节点与节点之间关系(主要分为:集合(节点与节点之间是独立的),数组(1:1),链表、树(一对多),图(多对多)1.1 vector:j就是数组的容器1.2 Deque(pop ,push)1.3 list(双向链表)1.4Set(集合不能放两个相同的数)Mulset (可以存放两个相同的数)1.5...原创 2019-04-06 22:44:27 · 106 阅读 · 0 评论 -
C ++ STL——string
1.C++ String 提供了一系列的字符串操作函数例如:查找函数,拷贝函数,删除参数,替换replace,插入insert2.string 的构造函数默认的构造函数:string ();//构造一个空的字符串string s1拷贝构造函数:string(const string& str)【构造一个与str一样的string , for example s...原创 2019-04-07 16:27:18 · 374 阅读 · 0 评论 -
完全理解平衡二叉树
非常感谢小甲鱼的讲解与参考下面博客(非常有助于理解程序)https://blog.csdn.net/deeplan_1994/article/details/82387202平衡二叉排序树(AVL)【self-Balance Binary Search Tree】定义:思路:使用递归算法这是一个二叉排序树这不是一棵树二叉排序树,因为3比10小却在10的父节点上...原创 2019-05-13 12:35:01 · 960 阅读 · 0 评论 -
C++数据结构(1)swap实现
#include <QCoreApplication>#include <iostream>/* @brief:C++数据结构--实现交换算法*/using namespace std;void swap(int x,int y){//交换失败,原因是值传递--就是把参数进行拷贝,把x 拷贝,y 拷贝,交换的是拷贝,原来的没有影响 int temp;...原创 2019-05-28 20:11:38 · 746 阅读 · 0 评论 -
方法重载和重写的区别
方法重写(overriding): 1、也叫子类的方法覆盖父类的方法,要求返回值、方法名和参数都相同。 2、子类抛出的异常不能超过父类相应方法抛出的异常。(子类异常不能超出父类异常) 3、子类方法的的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)在c++中使用virtual ,可以告诉编译器该函数是使用多态,不加virtual,就是重...原创 2019-06-12 23:23:06 · 123 阅读 · 0 评论 -
c++编译器对普通成员函数的内部处理
原创 2019-06-13 00:00:33 · 190 阅读 · 0 评论 -
最简单的理解KMP(kanmaopian algorithm)算法
1.首先感谢的帖子,需要可以看这连个贴子,讲的非常细https://www.cnblogs.com/c-cloud/p/3224788.htmlhttps://www.cnblogs.com/zhangtianq/p/5839909.html2.取其精华#include <stdio.h>#include <stdlib.h>#include <...原创 2019-06-06 22:07:56 · 509 阅读 · 0 评论 -
C++双向链表实现(前驱后继思想)
#include <iostream>using namespace std;/*****************@copyright2019************** * Function:doublelink * Author:zjl * date:2019-6-12 * Version:V1.0 * ****************...原创 2019-06-12 10:45:36 · 1952 阅读 · 0 评论 -
汉诺塔递归调用(C语言实现)
1.递归算法递归算法:是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。递归过程一般通过函数或子过程来实现。递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题递归算法解决问题的特点: (1)递归就是在过程或函数里调用自身。 (2)在使用递归策...原创 2018-11-03 14:17:09 · 76293 阅读 · 19 评论