数据结构
111
早早睡觉-
这个作者很懒,什么都没留下…
展开
-
哈希桶模拟实现 unordered_map/set(C++实现)
无原创 2022-07-11 20:03:08 · 190 阅读 · 1 评论 -
单链表基本操作(保姆级教程)c语言
单链表定义:1、表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。2、链表的结点结构┌───┬───┐│data│next│└───┴───┘data域–存放结点值的数据域next域–存放结点的直接后继的地址(位置)的指针域(链域)。单链表的基本操作:1.头文件 数据类型准备2.单链表的初始化3.单链表的显示4.单链表的头插法5.单链表的插入方法6.单链表的删除7.单原创 2021-08-08 20:12:57 · 1990 阅读 · 0 评论 -
C++ 模拟实现简易STL——string
在网上看到一种拷贝构造函数的思路在这里给大家分享一下就本类来说我最初写的拷贝构造为 //普通版本 string(const string& s1) :_size(s1._size), _capacity(_size+1) { _str = new char[_capacity + 1]; strcpy(_str, s1._str); }之后修改的拷贝构造string(const string& s1) :_str(nullptr),.原创 2022-03-01 16:30:42 · 638 阅读 · 0 评论 -
使用堆解决数据量大的TOPK问题
要想解决TOPK问题 肯定是要将数据进行排序 对于小数据来说 直接进行排序即可但是要从上亿或者上十亿的数据中找到TOPK的话 数据在内存中是存不下的所以今天介绍一种用堆来解决这种问题的思路首先介绍一下堆的基本算法顺序堆的基本类型typedef struct heap{ int* a; int size; int capacity;}HP;建立小堆void HeapPush(HP* hp, HPDataType x){ assert(hp); if (hp->s原创 2021-11-06 13:27:36 · 184 阅读 · 0 评论 -
模拟实现字符串函数
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include <string>#include<assert.h>char* my_strstr(const char* str1, const char* str2){ char* cp = (char*)str1; char* s1, * s2; if (!*str2) { ret原创 2021-10-03 10:56:12 · 87 阅读 · 0 评论 -
二分算法简单介绍
二分算法,顾名思义 就是把一组有序数据的搜索区域缩小一半。下面给大家举例说明一下 如何确定被缩小的搜索区间。原理分析拿一个有序的整形数组来举例 int a[10]={1,2,3,4,5,6,7,8,9,10},在初始算法的时候 应该确定左端点low,右端点high以及(mid=(low+high)/2)要搜索的目标值key,这里的左端点就是a[0],右端点为a[9],key为 a[6]。开始运算时,第一次的a[mid]<a[key]所以应该舍去的搜索区域为a[0]到a[mid...原创 2021-07-20 12:50:30 · 987 阅读 · 0 评论 -
堆排序(思路及c实现)
我起初认为的堆排序刚接触堆排序的时候 将元素通过算法排成大堆或者小堆,之后将大(小)堆的元素逐个取出 ,但在继续学习的过程中发现了每次进行 堆顶元素取出时 堆的结构就被破坏 所以每次取出后都需要重新将数据排序成小(大)堆,但是这样的时间复杂度就和O(n2)的算法无异了,体现不出O(logn)排序的优势。真正的堆排序在后面的学习中了解到真正的堆排序 (以降序为例)具体思路是将堆顶的元素与堆的最后一个元素进行交换(这里的堆是顺序堆),然后将堆的size–此时堆的size为6,将 0位置的1和6位原创 2021-11-13 12:37:36 · 1010 阅读 · 0 评论