数据结构
文章平均质量分 72
daidaihaha
这个作者很懒,什么都没留下…
展开
-
模拟实现STL中list(用迭代器)
在上一篇博客中有很详细的介绍迭代器的用法。点击打开链接STL中list底层其实是带头双向循环列表,STL中使用迭代器(iterator)指向list的结点,并进行增删查改等操作,本篇我们模拟STL中list的常用操作。先来构造list中的结点template<class T>struct My_ListNode{ T _date; My_ListNode<T>* _...原创 2018-03-14 23:17:00 · 348 阅读 · 0 评论 -
文件压缩项目源码
Heap.h/堆类#pragma once#include<iostream>using namespace std;#include<vector>#include<assert.h>//仿函数(函数对象)--建小堆template<typename T>struct Less{ bool operator()(const...原创 2018-09-13 13:30:06 · 738 阅读 · 0 评论 -
排序总结,插入排序 选择排序 交换排序 归并排序 计数排序 时间复杂度空间复杂度稳定性详解
排序大体分为两类:比较排序和非比较排序一 各个排序的基本实现1.直接插入排序和希尔排序//整体思路:往一段有序区间插入元素,end标记为有序区间的最后一个元素下标,要插入的元素下标为end+1此处就称tmp,先把他保存起来,(否则可能被覆盖)如果end+1这个元素//比有序区间的小,就把有序区间元素依次向后移动,移动结束条件有两个,1.end变为-1,2.有序区间内找到比tmp小的数。v...原创 2018-05-25 13:36:34 · 2068 阅读 · 0 评论 -
模拟实现堆算法,以及堆应用 (Top k问题)
堆数据结构是一种数组对象,它可以被视为一颗完全二叉树结构最大堆:每个父节点都大于孩子结点最小堆:每个父节点都小于孩子结点堆的优势:效率高 增加删除的时间复杂度均为O( lg N),不用堆vector插入删除总有一个为O(1),一个为O(N)堆的基本实现:我们先来建个最大堆,首先堆的成员是个数组,而且这个数组不能是固定的大小,因为我们还要实现堆的插入删除,因此我们可以用库中的vector来创建数组。...原创 2018-04-07 02:43:29 · 292 阅读 · 0 评论 -
浅析红黑树
一 红黑树:首先红黑树是一颗搜索二叉树,树中的每个结点不是红色就是黑色。它的特征如下:1.根节点是黑色2.每个结点不是黑色就是红色3.不能有两个连续的红结点4.每条路径上黑色结点数量相同二为什么要有红黑树?最开始我们学习了搜索二叉树,但是搜索二叉树有可能出现单链的情况,之后我们又引入了AVL树,AVL树是一种高度平衡的二叉搜索树。能够满足增加,删除,查找都是o(lg N)的时间复杂度,为什莫还要引...原创 2018-04-18 04:39:16 · 489 阅读 · 0 评论 -
AVL树
AVL树全称高度平衡二叉树,它是一种优化了的搜索二叉树。我们知道,由于搜索二叉树存在缺陷,有可能退化成单链,这样的话搜索效率就降低了。为了将二叉搜索树的效率控制在O(logN),所以对二叉搜索树加上一些条件,使得二叉搜索树高度平衡,时间复杂度为O(log N).一 定义: 1.首先AVL树是一个二叉搜索树 2.它的左子树,右子数都是AVL树 ...原创 2018-03-28 13:13:25 · 985 阅读 · 0 评论 -
会使用STL中的list并且模拟实现list
如何使用list,看如下代码#include<iostream>#include<list>#include<stdlib.h>#include<functional>using namespace std;void PrintList(list<int>& l1){ list<int>::iterato...原创 2018-04-03 00:29:23 · 185 阅读 · 0 评论 -
栈和队列的相关面试题(详解)
#include<iostream>#include<stack>#include<queue>using namespace std;//实现一个栈,要求实现Push(入栈) Pop(出栈) Min(返回最小值的操作) 时间复杂度为O(1)//方法一:用两个栈实现,先同时往s1,和min里面入第一个元素,接着s1正常入,同时_min入的时候用s1栈顶...原创 2018-04-09 23:29:32 · 440 阅读 · 0 评论 -
模拟实现栈(静态栈,动态栈)和队列
静态栈:#include<iostream>#include<assert.h>using namespace std;template <class T,size_t N=100>class Stack//栈顶插入,删除 因此适合用顺序表 //静态 {public: void Push(const T&x) { if (_si...原创 2018-04-09 22:41:52 · 425 阅读 · 0 评论 -
简单迷宫的实现-------------找一条通路
#include<iostream>#include<assert.h>#include<stack>using namespace std;//求解路径的基本思想:1.如果当前路径能够通过,将当前路经进行压栈,为了回退(回溯法),并将走过的路标记成2 不能走1,0可以走//2.如果当前路径上下左右都不能通过,则出栈(回溯)并且将当前路径标为3 即...原创 2018-04-09 01:58:12 · 773 阅读 · 0 评论 -
二叉搜索树
话不多说,直接上代码。#include<iostream>#include<stdlib.h>using namespace std;template <class K>struct BSTreeNode{ BSTreeNode<K>* _left; BSTreeNode<K>*_right; K _key; BSTre...原创 2018-03-25 23:54:59 · 143 阅读 · 0 评论 -
二叉树的创建以及递归非递归遍历
#pragma once#include<iostream>#include<stdlib.h>#include<assert.h>#include<stack>#include<queue>using namespace std;template<class T>struct BinTreeNode{ T...原创 2018-03-25 23:46:54 · 255 阅读 · 0 评论 -
迭代器 ------------如何使用迭代器(list)
一 引出迭代器:了解容器list ,就应该先会用容器list.首先我们要知道list,其实就是一个用模板实现的双向带头循环列表。肯定会有同学有疑问,那既然是个双向带头循环链表,那为什莫要用STL中容器list,#pragma once#include<iostream>using namespace std;#include<list>void test_lis...原创 2018-03-13 17:11:13 · 4180 阅读 · 0 评论 -
时间复杂度&amp;空间复杂度
一 :时间复杂度:实际上就是函数,这个函数计算基本操作执行的次数。 ps:这里的函数指的就是数学里面的函数,而不是C语言里面的函数。思考:可能会有人问,时间复杂度,那为什么不算程序运行的时间呢?原因是:程序运行的时间,跟环境有关,机器的性能等。同一个程序在不同机器下运行时间不同。1. 算法分析分类:(1 )最坏情况:任意输入规模的最大运行时间(上界)(2)平均情况:任意输入规模...原创 2018-03-12 23:52:23 · 459 阅读 · 0 评论 -
STLvector中reserve()和resize()区别
一 STL中resize()函数的作用是改变vector元素个数 resize(n,m)第二个参数可以省略 n代表改变元素个数为n,m代表初始化为m .主要有三层含义:1.如果n比vector容器的size小,结果是size减小到n,然后删除n之后的数据。2.如果n比vector容器的size大比容器的capacity小,结果是增加size,并初始化----如果指定了,初始...原创 2018-03-17 13:43:14 · 3190 阅读 · 0 评论 -
位图与布隆
1K=1024byte1M=1024k=1024*1024byte(约100万个字节)1G=1024M=1024*1024*1024byte(约为10亿个字节)先看一个题,给40亿个不重复无符号整数,给一个无符号整数,快速判断一个数是否在这40亿个数中。判断一个数在或者不在,我们通常有以下方法:1.暴力查找 时间复杂度O(N) 2.排序完,进行二分查找O(N)+O(N...原创 2018-08-21 17:14:11 · 278 阅读 · 0 评论