
数据结构
文章平均质量分 65
pg_dog
今日有酒今日醉,明日愁来明日愁。
展开
-
STL容器总结
序列式容器:vector:变长容器,可以根据数据的插入删除来重新构建容器容量。它是由三个迭代器来表示(起始字节位置,最后一个元素位置,占用的所有内存末尾位置),底层存储接口还是数组。array:(c++11新加的):和普通数组一样,都属于定长容器。只是封装了许多常用的接口,方便使用。注:vector和array提供了size和判空获取机制;vector和array提供了两个容器对象内容交换方法;迭代器失效问题。list:有双向链表实现(有的是双向循环列表),内存数据是不连续的,所以需要指针原创 2021-06-08 18:27:07 · 158 阅读 · 0 评论 -
二叉树基本操作
要想试着去模拟构建一棵二叉树,就必须了解二叉树在系统中是如何保存的,实际上,二叉树的节点保存在一个数组中,我们以下面二叉树为例:(#为空节点,占一个子节点位置) 满二叉树:每一层节点都是完整的,每层节点数(2^(n-1)) 完全二叉树:最后一个节点之前不存在空节点。 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。 1,求节点个数:(递归)思路:root为空时,返回0;root原创 2017-05-17 17:18:04 · 648 阅读 · 0 评论 -
AVL树的实现
AVL树又名高度平衡的搜索二叉树,上一篇文章我们讲到二叉搜索树时,说到它存在一个问题:退化,这使得它的时间复杂度从O(lgN)降到了O(N)。为了解决这个问题,出现了一棵新的树,也就是AVLtree,我们先来看看它的性质: 1,它是一棵搜索 二叉树,所以满足每个节点的值大于左子树中任意节点的值,并且小于右子树中任意节点的值。 2,它是一棵平衡树,他要求每个节点的左右子树的深度之差不能超过1,即这原创 2017-06-10 18:05:29 · 886 阅读 · 0 评论 -
红黑树的模拟实现
这里我来提供两篇写的不错的文章供大家参考: http://www.cnblogs.com/fornever/archive/2011/12/02/2270692.html http://blog.youkuaiyun.com/chenhuajie123/article/details/11951777 http://www.cnblogs.com/v-July-v/archive/2011/01/03/2原创 2017-06-06 23:58:46 · 502 阅读 · 0 评论 -
二叉树线索化
二叉树的线索化可以使得二叉树的非递归遍历不需借助栈或队列这种数据结构,最主要的是可以为之提供迭代器。线索化二叉树有三种方式:前序线索化、中序线索化、后序线索化(后序线索化需要三叉链结构)这里主要讲前序线索化和中序线索化,并为中序线索化提供迭代器。 线索化的思想就是将一颗二叉树遍历转换成有序双向链表进行访问。这样二叉树的节点结构就应该多一个前驱和后继的线索化标志。 节点结构 enum Point原创 2017-05-18 23:00:02 · 494 阅读 · 0 评论 -
搜索二叉树的实现
要模拟实现搜索二叉树,必须了解他的性质: 搜索二叉树的性质: 1,每个节点都有一个用于搜索的关键码,每个节点的关键码都不一样; 2,一个节点的左子树上所有的关键码总是小于它,而右子树的关键总是大于它; 3,每一个子树都是一个搜索二叉树;这里简单来模拟实现一下搜索二叉树(递归和非递归): 插入: 当插入一个节点时,你会发现新插入节点不会影响原先树的结构,所以不用调整,这是简单之处。原创 2017-06-04 23:40:16 · 531 阅读 · 0 评论 -
STL list的简单实现及list迭代器失效问题
上一篇我针对不同的数据结构来演示了迭代器的使用,今天我们主要来看看STL list的使用及他的模拟实现。 首先我们来实现list节点的结构体。看下面代码:templateT>struct __ListNode{ T _data; __ListNode* _next; __ListNode* _prev; __ListNode(const T& x)原创 2017-04-27 18:23:04 · 1460 阅读 · 2 评论 -
迭代器的使用
这一篇以至下一篇文章我来讲解关于迭代器。今天呢,我们重点了解迭代器以及了解掌握迭代器的使用。 迭代器(iterator)有时又称游标(cursor),是程序设计的软件设计模式,他是专门为访问容器而设计的一种数据结构,他实际是对访问容器这一操作进行了封装。也有一种说法是迭代器是指针的封装。和智能指针有点相似。 迭代器是一种对象,他用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容原创 2017-04-24 22:15:06 · 610 阅读 · 0 评论 -
冒泡排序的三种实现
今天呢,我们来看看冒泡排序的实现。对于冒泡排序是非常容易理解和实现的,今天我以从小到大排序为例进行详解。 我们先来看看冒泡排序的定义或者说冒泡排序的实现方法: 假设数组长度为N: 1,从第一个数据开始,比较相邻两个数据,如果前面数据大于后面数据,就交换两个数值; 2,遍历该数组,一次遍历结束后最大的数值就跑到了最后一位(即第N-1个位置); 3,N = N-1(最大数值位置已定不用再管);原创 2017-03-29 20:08:42 · 1079 阅读 · 0 评论