数据结构
嗔怪
学无止境
展开
-
非常巧妙用来解决集合问题的数据结构--并查集
并查集并查集应用并查集原理并查集实现1.并查集应用在很多笔试题目中,经常需要将n个不同元素划分成不相交的集合,通过一定的条件和关系让一些集合合并。在此过程中经常需要判断该元素是否属于某个集合,或查询该集合中元素的个数。适用于解决这类问题的数据结构类型称为并查集。题目1:.547. 朋友圈题目2:990. 等式方程的可满足性2.并查集原理通过数组下标标识元素本身,数组内容标识其集合上层节点。举个例子在班里有三波人是互相熟悉的,他们都有分别都有一个老大。现在给这些人进行编号{0,原创 2020-08-15 23:54:56 · 367 阅读 · 0 评论 -
一种高效查找树-radix的实现
radix的实现1.引言2.介绍3.实现如何插入数据1.引言我们知道,unoredered_map是一种查找时间复杂度o(1)的数据结构,经常用在数据查找相关的地方,但是在使用unordered_map进行数据查找时,hash冲突是一件令人很头疼的事情,因为hash冲突导致unordered_map的查找效率降低。radix就是一种适用于基于二进制表示的键值的查找树,在数据量增大的时候不会影响...原创 2020-04-17 07:26:56 · 1321 阅读 · 0 评论 -
归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。引用自百度百科。归并排序的优点是无论什么情况他的时间复杂度都是o(nlogn),但它的缺点就是空间复杂度为o(...原创 2019-07-29 15:46:31 · 68 阅读 · 0 评论 -
单链表函数功能实现
#pragma once#include<assert.h>#include<stdio.h>#include<malloc.h>typedef int SDataType;typedef struct SlistNode{ SDataType data; struct SlistNode* pNext;}Node;typedef str...原创 2019-06-30 18:55:30 · 601 阅读 · 0 评论 -
C语言顺序表功能实现
#include<stdio.h>#include<assert.h>#include<malloc.h>typedef int DateType;typedef struct SeqList{ DateType* arr; size_t size; size_t capacity;}SeqList;void SeqListInit(Seq...原创 2019-06-01 23:36:11 · 265 阅读 · 0 评论 -
堆
什么是堆?堆使用数组表示的完全二叉树,并且其结点大于或小于其子节点。大于是大堆,小于是小堆。堆的操作有哪些堆的初始化我建立了一个堆结点hp,这样在后面调用堆操作函数中方便调用,这个结点中包括了堆(就是数组)的指针a,堆(就是数组)的大小capacity,以及堆(就是数组)下标size。#include<stdio.h>#include<assert.h>#...原创 2019-07-26 16:19:59 · 235 阅读 · 0 评论 -
插入排序、希尔排序、选择排序、冒泡排序
插入排序如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。插入算法把要排序的数组分成两部分:第一部分为已排好序的,如果这个数组元素是无序的,那么这一部分我们可以...原创 2019-07-27 17:11:31 · 149 阅读 · 0 评论 -
选择排序的三种方法和递归非递归实现
快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。本文先介绍将要排序的数据分割成两个独立两部分的三种方法,我给它们起名为左右交换法、挖坑法、跟随交换法,其次介绍如何递归使用这些方法和非递归使用,最后介绍对快速排序优化的两种方...原创 2019-07-28 16:03:08 · 767 阅读 · 0 评论