数据结构
文章平均质量分 80
sofia_m
这个作者很懒,什么都没留下…
展开
-
【单链表经典面试题解析三】在无头单链表的一个非头节点前插入一个节点(要求不能遍历单链表)
每次再遇到单链表的题时,别慌,先好好审题,抓住重点。这道题其实很简单,只要注意到题目的重点,首先是非头结点,然后是前差一个新节点,再就是要求不能遍历单链表。 我们可以先给单链表的一个非头结点后插一个新节点,这个很简单,很容易完成吧,但是好像和题目有点不一样,没关系,我们再把这个非头结点和新节点值给换一换,这样就符合题目要求了,是不是很机智呢!不过感觉文字描述的不太好,看得云里雾里的,接下来原创 2017-10-18 14:58:08 · 922 阅读 · 0 评论 -
【数据结构】模拟实现红黑树(RBTree)的插入算法
1、红黑树基本概念含义:首先红黑树是一棵二叉搜索树,它在每一个节点上增加了一个存储位来表示节点的颜色(red 或 black)。红黑树通过对任何一条从根节点到叶子节点简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似平衡,而且在实际应用中发现红黑树性能确实比AVL树性能高。【数据结构】二叉搜索树的插入,删除,查找等基本操作的实现【数据结构】AVL树的平衡化...原创 2018-04-20 18:49:24 · 1597 阅读 · 1 评论 -
各类排序算法模拟实现
1、插入排序类1.1 直接插入排序时间复杂度O(n^2) 空间复杂度O(1) 1.1.1 基本思想:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完位置。1.1.2 源码#include<stdio.h>#include&amp原创 2018-06-09 23:13:20 · 725 阅读 · 0 评论 -
【数据结构】模拟实现一个哈夫曼树
实现源码:#pragma once#include<iostream>#include<vector>#include"Heap.h"using namespace std;//存放HuffTree节点信息template<class T>struct HuffNode{public: HuffNode(co原创 2018-07-21 13:21:35 · 416 阅读 · 0 评论 -
【剑指offer】面试题5----从尾到头打印单链表
输入一个链表的头结点,从尾到头反过来打印出每个节点的值原创 2018-07-27 17:26:07 · 642 阅读 · 0 评论 -
【剑指offer】面试题57----删除链表中的重复节点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5原创 2018-08-04 17:13:08 · 251 阅读 · 0 评论 -
【算法】排序详解-----快速排序
实现快速排序的三种方法--普通快排,挖坑法,前后指针法原创 2018-08-09 11:16:28 · 280 阅读 · 0 评论 -
三种快速排序以及快速排序的优化
<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm=&转载 2018-08-09 12:12:32 · 1261 阅读 · 1 评论 -
【剑指offer】面试题6----重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如图所示的二叉树并输出他的头结点。原创 2018-07-31 15:33:39 · 211 阅读 · 0 评论 -
【剑指offer】面试题7----用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。原创 2018-07-31 18:17:54 · 233 阅读 · 0 评论 -
【数据结构】快速排序优化版--三数取中法
源码:#include<iostream>#include<stdio.h>#include<string>using namespace std;int RandomInRange(int arr[], int star原创 2018-07-31 21:47:58 · 1161 阅读 · 0 评论 -
【数据结构】排序之归并排序
1、归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。2、递归实现因为使用了递归算法,所以在数据比较大的情况下,有可能会造成递归的层次太深,...原创 2018-08-09 21:39:07 · 205 阅读 · 0 评论 -
【剑指offer】面试题17----合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的。原创 2018-08-01 22:58:34 · 252 阅读 · 0 评论 -
【数据结构】AVL树的平衡化旋转及实现AVL树的插入操作
1、AVL树在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 “An algorithm for the organization of ...原创 2018-04-05 22:08:37 · 1032 阅读 · 0 评论 -
【数据结构】二叉搜索树的插入,删除,查找等基本操作的实现
1、基本概念二叉搜索树:又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树没有键值相等的节点特点:二叉搜索树的最左子树存放最小的值,最右子树存放最大的值;二叉搜索树如果按中序遍历的话,得到的数列是有序的;...原创 2018-03-14 21:37:20 · 1003 阅读 · 0 评论 -
【数据结构】线索化二叉树的基本操作
二叉树的线索化源码:二叉树的前序线索化,二叉树的中序线索化,二叉树的后序线索化,前序非递归遍历线索化后的二叉树,中序非递归遍历线索化后的二叉树,后序非递归遍历线索化后的二叉树,原创 2018-01-20 16:45:35 · 1137 阅读 · 0 评论 -
单链表的基本操作C语言实现
单链表主要有以下基本操作:头插,尾插,头删,尾删,返回结点在链表中的位置,任意位置插入值为data的结点, 删除pos位置上的结点 ,求链表中节点的个数,销毁单链表 。 代码如下所示:List.h#ifndef __LINKED_LIST__#define __LINKED_LIST__typedef int DataType;typede...原创 2017-10-18 21:11:23 · 1457 阅读 · 0 评论 -
【单链表经典面试题解析四】用单链表实现约瑟夫环
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一原创 2017-10-18 21:48:39 · 1812 阅读 · 0 评论 -
【单链表经典面试题解析一】从尾到头打印单链表
从尾到头打印单链表,我们可以原创 2017-10-15 17:17:48 · 505 阅读 · 0 评论 -
【单链表经典面试题解析二】删除一个无头单链表的非尾节点(不能遍历链表)
要在不能遍历一遍单链表的情况下,删除单链表的非尾结点。我们可以试试如下这种方法: 首先,我们先建立一个节点pCur,令节点pCur指向要删除的节点pos的下一个节点,然后,我们先把pCur的值赋给pos,然后再删除掉pCur这个节点,示意图如下所示: 令节点pCur指向要删除的节点pos的下一个节点: 我们先把pCur的值赋给pos,然后再删除掉pCur这个节点:原创 2017-10-16 15:47:20 · 913 阅读 · 0 评论 -
【C++】Perm递归全排列函数分析
void Perm(int* array, int size, int N) { if(N == size) { for(int i = 0; i < size; ++i){ cout<<array[i] ; } cout<<endl; } else { for(int i = N; i < size; ++i){ Perm全排列函数过程分析,时间复杂度分析。原创 2017-12-21 17:28:18 · 6367 阅读 · 0 评论 -
【数据结构】优先级队列(用堆完成)
优先级队列的实现插入删除元素个数原创 2018-01-21 16:35:11 · 998 阅读 · 0 评论 -
【数据结构】topK问题,海量数据找出前K个大的数据
topK问题:假如需要从十亿个数据中找出最大的前k个数,也就是海量数据处理问题。一般遇见这种问题,我们肯定会想到先排序,再取前K个数据就可以了。但是海量数据如果这样处理,那就会大大提高时间复杂度了。那么我们应该如何处理呢?首先假如这是一组大数据,取出前K个元素放入小堆里:在小堆里,这前K个元素是有序的,最小的元素放在堆顶。依次取数组里的下一个数据与堆顶元素进行比较,如果数组数据大于堆顶元素,就可以利原创 2018-01-21 22:14:01 · 2400 阅读 · 1 评论 -
【数据结构】堆结构小根堆,大根堆,插入,删除等操作的实现
一、堆的基本概念【含义】:如果有一个关键码的集合K={k0,k1,k2, … ,k(n-1)},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:ki = k2*i+1 且 ki >= k2*i+2 )i=0,1,2 … ,则称这个堆为最小堆(或最大堆)。【最小堆】:任一节点的关键码均小于等于它的左右孩子的关键码,位于堆顶节点的关键码最小。【最大堆】:任一节点原创 2018-01-21 15:28:20 · 19644 阅读 · 2 评论 -
二叉树经典面试题解析一:用非递归实现二叉树的前序遍历,中序遍历,后序遍历
二叉树的基本操作二叉树的基本操作博客地址用非递归实现的二叉树的前序遍历源码: //前序非递归 void _PreOrderNR(pNode _pRoot){ pNode pCur = _pRoot; stack s; while (pCur || !s.empty()){ //将左侧节原创 2018-01-07 15:12:46 · 1624 阅读 · 0 评论 -
【数据结构】二叉树经典面试题解析二:求取二叉树的深度
二叉树的基本操作:二叉树的基本操作 博客例子:源码:size_t _Depth(Node* root) { if (NULL == root) { return 0; } if (NULL == root->_left && NULL == root->_right)原创 2018-01-08 16:03:27 · 658 阅读 · 0 评论 -
【数据结构】二叉树的基本操作
求取二叉树的深度解析博客用非递归实现二叉树的前序,中序,后序遍历解析博客源码:bintree.h#pragma once#ifndef __BINTREE_H__#define __BINTREE_H__#include#include#include#includeusing namespace std;//二叉树节点templateclass原创 2018-01-04 19:12:12 · 668 阅读 · 0 评论 -
【C++】C++复习----解析智能指针
1、智能指针智能指针是为了方便管理动态内存,防止产生内存泄漏,而对指针进行的一层封装,可以通过析构函数,构造函数,赋值运算符重载的处理,而实现的可以自动管理指针所指向的动态内存,防止产生内存泄漏。资源分配即初始化(RAII):定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。之前的版本中有 auto_ptr,在...原创 2018-08-21 18:09:30 · 318 阅读 · 0 评论