数据结构
pointer_y
梦想就是用来实现的。
展开
-
【数据结构】AVL树详解
1.什么是AVL树AVL树又称平衡二叉搜索树,它能保证二叉树高度相对平衡,尽量降低二叉树的高度,提高搜索效率。单纯的二叉搜索树在最坏的情况下插入查找删除等操作时间复杂度会是O(N),例如:所以,AVL树就能避免这种情况,使得增删查改的时间复杂度为O(lgN). (ps:这里的lgN指的是log以2为底的N。)那么AVL树是怎么做到的呢,看看它的特点你就大概知道了:1> 左子原创 2016-11-02 21:41:34 · 9758 阅读 · 2 评论 -
【C语言】单链表
程序实现了单链表的基本操作,包括创建,初始化,销毁,头插,头删,尾插,尾删,打印单链表,查找指定数据的位置,指定位置插入指定数据,删除指定数据,删除链表里出现的所有指定数据,指定位置删除,单链表的冒泡排序。博主现阶段还是技术小白,此初步调试完成,读者如果发现新的bug,还请不吝赐教! 先介绍一下单链表的概念:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元原创 2016-06-04 18:32:13 · 793 阅读 · 0 评论 -
【C语言】静态线性顺序表
头文件里:#define _CRT_SECURE_NO_WARNINGS 1 #ifndef __SEQLIST_H__#define __SEQLIST_H__#define MAX 100#include#include#include#includetypedef int DataType; //类型重命名typedef struct Seqlist{原创 2016-05-25 15:46:40 · 593 阅读 · 0 评论 -
【数据结构】浅析B树
一、B树的概念B树,概括来说是一个节点可以拥有多于2个子节点的平衡多叉树。特点:1> 根节点至少有两个子节点2>每个节点有M-1个key原创 2016-11-15 21:36:13 · 1411 阅读 · 0 评论 -
【数据结构】二叉树部分面试题解法
1.问题描述:根据给定的二叉树前序中序遍历结果,重建出这颗二叉树。例如:前序遍历结果:1,2,3,4,5,6。中序遍历结果:3,2,4,1,6,5。2.问题分析:我们知道,前序遍历的顺序是:当前结点,左子树,右子树。那么,前序遍历的第一个数字就是根节点。而中序遍历的顺序是:左子树,当前结点,右子树。所以,对于中序序列来说,根节点的左右分别就是左子树的结点和右子树的结点。故,我的做法是:原创 2016-11-30 22:23:48 · 440 阅读 · 0 评论 -
【小项目】用Huffman树实现文件压缩并解压
一、前言 如果你学习数据结构,就一定会学到Huffman树,而Huffman编码实际上上就是zip压缩的核心部分,所以,如果已经学习了Huffman树,为何不尝试写一个压缩程序出来呢?如果你没有学习Huffman树,那咱们就一起先学习一下Huffman树吧。二、Huffman树压缩文件定义:Huffman树,又称为最优二叉树,是加权路径长度最短的二叉树。建立:原创 2016-11-09 20:55:23 · 14225 阅读 · 8 评论 -
【数据结构】几种常见的排序算法
一、排序算法的分类 下图是我掌握的一些排序算法,我将他们做了分类,当然,排序算法远不止这些。本篇博客主要记录插入,选择,以及交换排序的冒泡排序,因为快排和归并算法相对复杂,所以,下一篇博客再细细讲述。二、各种算法的基本思想,分析及其代码实现1.直接插入排序 a>算法思想:假设第一个数是有序的,那么把后面的数拿出来插入到这个有序数的合适位置,假设是升序(比第一原创 2016-11-26 23:06:40 · 8090 阅读 · 0 评论 -
【数据结构】快速排序
一、快排的几种实现方法1.左右指针法a>算法思想:选定数组的最后一个数作为关键值(key),从左边开始遍历找比key大的,从右边找比key小的,找到后交换左右指针,让比key大的数据向后调,比key小的数据调到前面,等到左右指针相等的时候,把数组的最后一位和指针所指位置交换,这样一趟排序过后,key值的前面都是比它小的数,后面都比它大。此时key相当于划分了它左右两个区间,那么两个区间再次原创 2016-11-27 15:12:01 · 1039 阅读 · 0 评论 -
【数据结构】对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间
题目描述: 对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间。例如:原数组为:A,B,C,D,E,现给定新的位置为:3,0,1,4,2,那么排序后为D,A,B,E,C。问题分析: 为什么分类为数据结构,因为其实这个题就是快排的挖坑法的变形。如果你还不清楚什么是快排的挖坑法:参见这里。解决思路: 保存第一个位原创 2016-12-15 22:39:00 · 760 阅读 · 3 评论 -
【C语言】约瑟夫环(用单向循环链表解决)
约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。这里我用单向循环链表来解决这个问题。我们先考虑几种情况:当m=1和k=1的时候,要挨个删除链表中的结点。在k!=1和m=1的情况下,指针必须先向后移动到k的位置,并且记住k的...原创 2016-06-05 19:42:32 · 16901 阅读 · 1 评论 -
【C语言】单链表相关面试题(一)
先前已经写过一些单链表的基本操作:单链表的基本操作(若有兴趣可先看看链表的基本操作)这次链表相关的面试题是建立在这个之上写的,测试的时候会调用的其中的一些函数。今天主要说以下几个常见的链表面试题1.查询链表中间结点2.只给出一个位置,删除非尾结点3.逆序链表 查询链表的中间结点,我们知道,单链表只能顺序访问,那么怎么查找中间结点呢?你可能会原创 2016-06-26 21:34:52 · 802 阅读 · 0 评论 -
【数据结构】二叉搜索树的递归与非递归实现
一.什么是二叉搜索树1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。 3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。4. 左右子树都是二叉搜索树。二.二叉搜索树的代码实现(这里我们主要关心增删查改)#pragma onceusing原创 2016-10-25 19:41:23 · 512 阅读 · 0 评论 -
【数据结构】堆,堆实现优先级队列,堆排序
1.什么是堆?堆是一种数据结构,底层是一种数组对象,它可以被视为一棵完全二叉树结构 最大堆:每个父节点的都大于孩子节点; 最小堆:每个父节点的都小于孩子节点。2.堆数据结构二叉树存储。如图所示是个大堆,只能保证父节点比孩子节点大。所以下标为0是整个堆最大的,但无法确定下标为1,2的数据哪个更大3.堆数据结构和优先级队列的代码实现思想:从第一个非孩子节点的下标开始原创 2016-10-11 21:08:44 · 722 阅读 · 0 评论 -
【数据结构】中序线索化二叉树后实现一个迭代器来遍历二叉树
1.创建二叉树的结点#pragma once#include#includeusing namespace std;enum PointerTag{ THREND, LINK,};templatestruct BinaryTreeThdNode{ typedef BinaryTreeThdNode Node; BinaryTreeThdNode(T data) :原创 2016-10-10 09:22:21 · 620 阅读 · 0 评论 -
【数据结构】二叉树的递归与非递归创建和遍历
下面代码所用到的测试用例画成树的样子长这样:创建树时给的是数组,用‘#’代表非法值,即该结点为空。二叉树的递归实现:#pragma once#include#includeusing namespace std;templatestruct BinaryTreeNode{ BinaryTreeNode(T value=0) :_value(value), _l原创 2016-10-05 17:04:15 · 481 阅读 · 0 评论 -
【C++】模板类链表
上一篇博客介绍了模板类顺序表,此篇博客主要是模板类链表的实现。#pragma once#include#includeusing namespace std;templatestruct Node{public: Node(const T&x) :_data(x), _next(NULL), _prev(NULL) {} T _data; Node*_next;原创 2016-09-01 17:13:01 · 474 阅读 · 0 评论 -
【C++】模板类顺序表
1.什么是模板 模板是泛型编程的基础。所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。如果我们写一个普通的顺序表,那它只能满足一种数据存储类型,之后如果想把这个顺序表改成其他数据类型的顺序表,那就必须得改代码了,感觉很麻烦,还容易出错。所以,写一个模板类顺序表,在构建顺序表的时候把数据类型传过去,这样,顺序表存储的数据类型我们想传个什么就能构建什么数据类型的顺序表。是不是很方原创 2016-08-29 09:01:23 · 3705 阅读 · 0 评论 -
【数据结构】大数据处理面试题解法
大数据处理的思路一般是这样的:把一个内存中放不下的文件按照一定的方法切分成小文件,再看是否有合适的数据结构能解决这个问题。当然,有时候不用切分,用位图也可以解决,根据具体问题而定。接下来我们看看下面几道大数据的面试题,这种题一般面试官也只是需要一个思路。1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?问题分析: 100G普原创 2016-11-08 22:44:07 · 740 阅读 · 0 评论 -
【C语言】单链表相关面试题(二)
上篇博客介绍了查询链表中间结点,删除非尾结点,逆序链表三个问题。有兴趣可点击链接查看:单链表相关面试题(一)此篇博客将介绍:1.删除倒数第k个结点(k>1)2.合并两个有序链表3.判断链表是否带环,若带环求环的长度,找出环的入口点4.判断两条链表是否相交,相交则求出交点。一、删除倒数第k个结点1.算法思路: 仍然通过设置快慢指针的方法解决,快指针每原创 2016-06-30 18:18:37 · 373 阅读 · 0 评论 -
【STL】《STL源码剖析》读书笔记
算法算法可分为质变算法和非质变算法,质变算法改变操作对象的值,通常提供两个版本,一个直接改变操作对象值,另一种是拷贝一份操作对象并改变,最后返回改变后的副本;非质变算法不会改变操作对象的值。使用算法必须包含头文件<algorithm>。1.数值算法使用SGI版STL数值算法需要包含头文件<stl_numeric.h>1.1 accumulatetemplate&l...原创 2018-12-21 16:03:16 · 474 阅读 · 0 评论