数据结构
出走刺猬
这个作者很懒,什么都没留下…
展开
-
数据结构---递归用法
#include<iostream>using namespace std;struct Node{ Node(int data) :_data(data) ,_next(NULL) {} int _data; Node* _next;};//void PrintfListFromTail2Head(Node* pHead)//1原创 2017-04-15 16:48:02 · 322 阅读 · 0 评论 -
二叉树的基本操作及部分面试题
1.构造二叉树#include<iostream>#include<queue>#include<stack>#include<assert.h>using namespace std;template<class T>struct BinaryTreeNode{ T _value; BinaryTreeNode<T>* _pLeft;//左孩子 BinaryTr原创 2017-05-07 16:12:37 · 285 阅读 · 0 评论 -
AVL树的四种旋转--初步解析
>AVL树也叫作平衡树,它的每个节点 都有平衡因子: 平衡因子=右子树的高度-左子树的高度AVL树的性质: 平衡因子大小为(-2,2),即-1,0,1当一个节点插入后可能导致AVL树的不平衡,因此需要经过旋转,让这棵树满足AVL树的性质: 一共有四种旋转方式,分别对应插入节点后的四种情况:1.左单旋: 2.右单旋: 3.左右双旋: 先进行左单旋,再进行右单旋原创 2017-05-25 18:39:59 · 6525 阅读 · 6 评论 -
二叉搜索树---使用迭代器
迭代器:它的用法与指针用法相同 使用迭代器实现二叉搜索树,使用有两个指针域的头结点实现, 并且多给BSTree中加入一个双亲结点_pParent。代码: BSTIterator.hpp#pragma once#include<iostream>using namespace std;#include<assert.h>template<class k,class v>s原创 2017-05-25 16:17:40 · 319 阅读 · 0 评论 -
使用栈存储后缀表达式
12*(3+4)-6+8/2的后缀表达式为:12 3 4 + * 6 - 8 2 / + 使用栈模拟存储后缀表达式:#include<iostream>#include<stack>using namespace std;enum OPERATOR//使用枚举类型{ DATA, ADD, SUB, MUL, DIV};struct Cell{原创 2017-05-04 19:13:07 · 465 阅读 · 0 评论 -
栈的基本操作
栈的特点:先进后出#include<iostream>#include<assert.h>using namespace std;template<class T>class Stack{public: Stack(size_t capacity = 10)//构造函数 :_capacity(capacity) ,_size(0) {原创 2017-05-04 19:07:16 · 236 阅读 · 0 评论 -
二叉树的基本操作--递归
1.创建结构体保存二叉树的节点,每个节点有值,左孩子,右孩子template<class T>struct BinaryTreeNode{ T _value; BinaryTreeNode<T>* _pLeft;//左孩子 BinaryTreeNode<T>* _pRight;//右孩子 BinaryTreeNode(const T& value)原创 2017-05-04 18:57:00 · 275 阅读 · 0 评论 -
二叉搜索树---递归及非递归
二叉搜索树又称为二叉排序树,它为一棵空树,或者是一棵左子树所有节点的值比根节点小,右子树所有节点的值比根节点大的一棵树。 性质: ①.二叉搜索树中,最左边的结点值最小,最右边的结点值最大 ②中序遍历一棵二叉搜索树,所有节点的值是按顺序排列的 构造一棵二叉搜索树时,比较插入结点的key值,key小于根节点的_key时,向根节点的左边走,大于根节点的_key值时,向根节点的右边原创 2017-05-23 16:38:20 · 381 阅读 · 0 评论 -
哈夫曼树Huffmantree
实现哈夫曼树,首先要了解这些知识: 路径长度:一个节点到另一个节点的边数; 二叉树的路径长度(PL):每个叶子节点到根节点的路径长度相加; 带权路径长度(WPL):每个叶子结点到根节点的路径乘权值相加之和; 哈夫曼树:相同节点个数的二叉树中,WPL最小的二叉树;构建哈夫曼树的方法: 将权值最小的两个节点作为左右孩子,它们的权值之和即为双亲结点的权值,再从权值集合其他结点原创 2017-05-11 18:36:01 · 387 阅读 · 0 评论 -
优先级队列---使用堆
优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权。 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 ,对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。 由于优先级队列的性质,我们可以使用堆实现它:代码: Heap.hpp#include<ostream>using namespace std;#incl原创 2017-05-11 18:28:47 · 227 阅读 · 0 评论 -
模拟实现队列
队列:在队尾插入元素,在队头删除元素,符合先进先出原则; 栈:符合先进后出原则; 队列的分类: 1.顺序队列 2.循环队列 3.链式队列 4.优先级队列 5.双端队列循环队列的实现方法: 方法一:使用rear和front标记,当rear走到最后一个元素时,下一步为rear=rear%最大容量,当(rear+1)%最大容量=front时,表示队列已满原创 2017-05-11 18:08:27 · 256 阅读 · 0 评论 -
模拟实现堆
堆分为最小堆和最大堆。 最小堆:堆顶的关键码最小,每个节点的关键码小于该节点的左右孩子结点,并且从根节点到每个节点的路径上,关键码依次递增。 最大堆:堆顶的关键码最大,每个节点的关键码大于该节点的左右孩子结点,并且从根节点到每个节点的路径上,关键码依次递减。 将一棵二叉树调整为最小堆的方法: 1.比较左右孩子的关键码大小,较小的用child标记 2.比较child和pa原创 2017-05-11 15:13:47 · 238 阅读 · 0 评论 -
AVL树的进一步实现
代码:#pragma once#include<iostream>using namespace std;template<class K, class V>struct AVLTreeNode{ AVLTreeNode(const K& key, const V& value) : _pLeft(NULL) , _pRight(NULL)原创 2017-06-15 19:10:13 · 261 阅读 · 0 评论