Data-Struct
wanWan呐
code changes the world
hello world!!!
展开
-
unordered_map/unorderd_set使用与哈希介绍
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 O(logN),即最差情况下 需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次 数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器。unordered_map/unordered_set/unordered_multimap/unordered_multiset这四个容器与关联式容器(map、set、multimap、multiset原创 2020-07-01 14:15:23 · 649 阅读 · 0 评论 -
排序算法—希尔排序
1.希尔排序的算法思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。2.简单总结下希尔排序的基本思路:先取一个小于n的整数gap1(一般为 n/3 +1)作为第一个增量,把数组全部记录分组。所有距离为 gap1 的倍数的记录放在同一个组中。先在每一小组内进行直接插入排...原创 2019-07-30 23:45:30 · 572 阅读 · 0 评论 -
排序算法—直接插入排序
1.直接插入排序算法思想直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。2.简单总结直接选择排序的基本思路当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]**已经排好序,**此时用array[i]的排序码与 ...原创 2019-07-30 22:34:26 · 733 阅读 · 0 评论 -
排序算法—直接选择排序
1.选择排序的算法思想每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的 数据元素排完 。2.简单总结直接选择排序的基本思路a.在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素.b.若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换.c.在剩余的array[...原创 2019-07-30 20:19:33 · 1461 阅读 · 0 评论 -
排序算法—堆排序
1.堆排序的算法思想堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是 通过堆来进行选择数据。2.简单总结下堆排序的基本思路:a.将无序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆(注意:实现升序需要建大堆,实现降序需要建小堆);b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;c.重新调整结构,使其满足堆定义,然后...原创 2019-07-30 17:03:59 · 447 阅读 · 0 评论 -
排序算法—冒泡排序
1.冒泡排序的算法思想①比较相邻的元素。如果第一个比第二个大,就交换他们两个。②对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。③ 针对所有的元素重复以上的步骤,除了最后一个。④持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。2.以数组{36,26, 27,2,4,19,50,48}为例,以下为动态图分析:...原创 2019-07-30 15:43:36 · 423 阅读 · 0 评论 -
排序算法—快速排序
1. 快速排序的算法思想快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。2. 快速排序的三种基本方法(递归实现)hoare法(又称作左右指针法)...原创 2019-07-28 23:58:17 · 697 阅读 · 1 评论 -
带头双向循环链表实现
Dlist.h#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int Datatype;typedef struct ListNode{ Datatype _val; struct ListNode* _prev; struct ListNo...原创 2019-07-19 00:11:35 · 482 阅读 · 0 评论 -
无头单向非循环链表实现
SList.h#pragma once//无头单向非循环链表#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int SlistDataType;typedef struct SlistNode//每个节...原创 2019-07-19 00:05:36 · 379 阅读 · 0 评论 -
时间复杂度&&空间复杂度
1.算法效率时间效率(又被称为时间复杂度)时间复杂度主要衡量一个算法的运行速度。空间效率(又被称作空间复杂度)空间复杂度主要衡量一个算法所需要的额外空间。2.时间复杂度时间复杂度的概念:算法中的基本操作的执行次数,为算法的时间复杂度。举个例子:void Func(int N){ int count = 0; for (int i = 0; i < N; ...原创 2019-06-30 19:34:35 · 405 阅读 · 0 评论 -
判断单链表中是否有环等相关问题
1.如何判断一个链表是否有环?采用快慢指针的思路,一个指针一次移动一个结点,另一个指针移动两个结点,如果有环,则进入环后,快指针肯定可以追赶上慢指针,这样就会出现两者相等的情况,从而得出有环。代码实现(例子:Leetcode第141题)/** * Definition for singly-linked list. * struct ListNode { * int val...原创 2019-07-14 23:14:16 · 393 阅读 · 0 评论 -
顺序表
1.seqlist.h#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<assert.h>#include<stdlib.h>typedef int data;typedef struct Seqlist{ data* array;//顺序表中存的值...原创 2019-06-30 11:56:42 · 350 阅读 · 0 评论