随笔分类 -  算法

摘要:详细描述,好像跟我自己写的差不多......不过终究是大神级别,讲的就是透彻1. 概述AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下都是O(log n),增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。2. 基本术语有四种种情况可能导致二叉查找树不平衡,分别为:(1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因子由1变为2(2)RR:插入一个新节点到 阅读全文
posted @ 2012-09-20 19:56 xingoo 阅读(959) 评论(0) 推荐(0) 编辑
摘要:AVL树节点声明:1 struct AvlNode2 {3 Comparable element;4 AvlNode *left;5 AvlNode *right;6 int height;7 8 AvlNode( const Comparable & theElement,AvlNode *lt,AvlNode *rt,int h=0):element ( theElement),left(lt),right(rt),height(t)9 };计算节点高度:1 int height( AvlNode * t) const2 {3 return... 阅读全文
posted @ 2012-09-20 18:37 xingoo 阅读(322) 评论(0) 推荐(0) 编辑
摘要:又是一次的毕业季,羡慕嫉妒啊....二叉查找树类的框架: 1 template <typename Comparable> 2 class BinarySearchTree 3 { 4 public: 5 BinarySearchTree(); 6 BinarySearchTree(const BinarySearchTree & rhs) 7 ~BinarySearchTree(); 8 9 const Comparable & findMin() const;10 const Comparable & findMax() const;11 12 ... 阅读全文
posted @ 2012-09-19 20:35 xingoo 阅读(375) 评论(0) 推荐(0) 编辑
摘要:将新的节点插入双向链表的时候:iterator insert(iterator itr,const Object & x)//向双向链表中插入一个x节点{ Node *p = itr.current; theSize++; return iterator(p->prev = p->prev->next = new Node(x,p->prev,p));}LIST类的删除节点的过程://删除双向链表中的一个节点iterator erase(iterator itr){ Node *p = itr.current; iterator retVal(p->nex 阅读全文
posted @ 2012-09-18 20:19 xingoo 阅读(615) 评论(0) 推荐(0) 编辑
摘要:LIST类结构 1 template <typename Object> 2 class List 3 { 4 private: 5 struct Node//所有都是公有的 6 { 7 Object data; 8 Node *prev; 9 Node *next; 10 11 Node(const Object & d = Object(),Node *p = NUll,Node *n = Null): 12 d... 阅读全文
posted @ 2012-09-18 20:01 xingoo 阅读(450) 评论(0) 推荐(0) 编辑
摘要:#include <iostream>#include <list>#include <string>#include <vector>#include <bitset>using namespace std;template <typename Container,typename Object>void change(Container & c,const Object & newValue)//改变新值{ typename Container::ierator itr = c.begin(); whi 阅读全文
posted @ 2012-09-18 18:57 xingoo 阅读(691) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示