学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

自己的数据结构库

本主题由 静夜思 于 2008-5-10 16:24 拒绝承认原创

自己的数据结构库

以学习为目的,创建自己的库,以后不断更新。代码很垃圾,日后会渐渐完善.....
有兴趣的朋友可以测试一下//
复制内容到剪贴板
代码:
[quote][font=新宋体][size=2][color=008000]/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
[/color][color=FF0000]#ifndef [/color]MyDS_H_
[color=FF0000]#define [/color]MyDS_H_

[color=FF0000]#include[/color]<[color=FF0000]string[/color]>
[color=008000]//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//[/color]
[color=008000]//  application:  to support some programing by this. The header file included[/color]
[color=008000]//       some basic and important ADT. For example, stack, linkStack, queue, deque[/color]
[color=008000]//       linkQueue, Slink, Clink, Dlink, Max(Min)Heap, BST, RBT, AVL, Splay, BTree, BHeap[/color]
[color=008000]//       FibHeap etc.[/color]
[color=008000]//[/color]
[color=008000]//  author:   taetrie (c) All Rights Reserved[/color]
[color=008000]//[/color]
[color=008000]//  created:  2008/5/9  [/color]
[color=008000]//[/color]
[color=008000]//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/[/color]
[color=0000FF]class [/color]error_stack;
[color=0000FF]template[/color]<typename type>
[color=0000FF]class [/color][color=FF0000]stack
[/color]{
[color=0000FF]public[/color]:
    [color=008000]//ctor and dtor[/color]
    [color=0000FF]explicit [/color][color=FF0000]stack[/color]([color=0000FF]int [/color][color=D04000]size [/color]= [color=800080]50[/color]) ;
    [color=FF0000]stack[/color]([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& source_stack) ;
    ~[color=FF0000]stack[/color]() ;
    [color=008000]//main function[/color]
    [color=0000FF]int [/color][color=D04000]size[/color]() [color=0000FF]const[/color];
    [color=0000FF]bool [/color][color=008080]empty[/color]() [color=0000FF]const[/color];
    [color=0000FF]void [/color][color=D04000]push[/color]([color=0000FF]const [/color]type& value);
    [color=0000FF]void [/color][color=D04000]pop[/color]() ;
    [color=0000FF]const [/color]type& [color=008080]top[/color]() [color=0000FF]const[/color];
    [color=008000]//overload operator[/color]
    [color=FF0000]stack[/color]& [color=0000FF]operator[/color]=([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& source_stack);
    [color=0000FF]template[/color]<typename type_>
    [color=0000FF]friend bool operator[/color]==([color=0000FF]const [/color][color=FF0000]stack[/color]<type_>& s1,[color=0000FF]const [/color][color=FF0000]stack[/color]<type_>& s2);
    [color=0000FF]template[/color]<typename type_>
    [color=0000FF]friend bool operator[/color]> ([color=0000FF]const [/color][color=FF0000]stack[/color]<type_>& s1,[color=0000FF]const [/color][color=FF0000]stack[/color]<type_>& s2);
    [color=0000FF]template[/color]<typename type_>
    [color=0000FF]friend bool operator[/color]< ([color=0000FF]const [/color][color=FF0000]stack[/color]<type_>& s1,[color=0000FF]const [/color][color=FF0000]stack[/color]<type_>& s2);
[color=0000FF]private[/color]:
    [color=008000]//copy function[/color]
    [color=0000FF]void [/color][color=008080]copy_[/color]([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& source_stack);
    [color=008000]//data member[/color]
    type* _stack;
    [color=0000FF]int [/color]_size;
    [color=0000FF]int [/color]_top;
};
[color=008000]//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/[/color]
[color=008000]//[/color]
[color=008000]// define  error_stack[/color]
[color=0000FF]class [/color]error_stack
{
[color=0000FF]public[/color]:
    [color=0000FF]explicit [/color][color=008080]error_stack[/color]([color=0000FF]const char[/color]* msg ):[color=008080]str[/color](msg){}
    ~[color=008080]error_stack[/color]() {}
    [color=0000FF]const [/color][color=FF0000]std[/color]::[color=FF0000]string[/color]& [color=008080]what[/color]() [color=0000FF]const
    [/color]{
        [color=0000FF]return [/color]str;
    }
[color=0000FF]private[/color]:
    [color=FF0000]std[/color]::[color=FF0000]string [/color]str;
};
[color=008000]//\  define   stack[/color]
[color=0000FF]template[/color]<typename type>
[color=0000FF]inline int [/color][color=FF0000]stack[/color]<type>::[color=D04000]size[/color]() [color=0000FF]const
[/color]{
    [color=0000FF]return [/color]_size;
}
[color=0000FF]template[/color]<typename type>
[color=0000FF]inline bool [/color][color=FF0000]stack[/color]<type>::[color=008080]empty[/color]() [color=0000FF]const
[/color]{
    [color=0000FF]return  [/color]-[color=800080]1 [/color]== _top ? true : false;
}
[color=008000]// copy_ function[/color]
[color=0000FF]template[/color]<typename type>
[color=0000FF]void [/color][color=FF0000]stack[/color]<type>::[color=008080]copy_[/color]([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& source_stack )
{
    [color=0000FF]for[/color]([color=0000FF]int [/color]i = source_stack._top; i>=[color=800080]0[/color]; --i )
        _stack[i] = source_stack._stack[i];
}
[color=008000]// ctor of stack[/color]
[color=0000FF]template[/color]<typename type>
[color=FF0000]stack[/color]<type>::[color=FF0000]stack[/color]([color=0000FF]int [/color][color=D04000]size[/color]): [color=008080]_top[/color]( -[color=800080]1[/color])
{
    _stack = [color=0000FF]new [/color]type[ _size=[color=D04000]size [/color]];
}
[color=0000FF]template[/color]<typename type>
[color=FF0000]stack[/color]<type>::[color=FF0000]stack[/color]([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& source_stack)
{
    _stack = [color=0000FF]new [/color]type[ _size=source_stack._size ];
    [color=0000FF]if[/color]( source_stack.[color=008080]empty[/color]() )
    {
        _top = -[color=800080]1[/color];
    }
    [color=0000FF]else
    [/color]{
        _top = source_stack._top;
        [color=008080]copy_[/color]( source_stack );
    }
}
[color=0000FF]template[/color]<typename type>
[color=FF0000]stack[/color]<type>::~[color=FF0000]stack[/color]()
{
    [color=0000FF]delete [/color][] _stack;
}
[color=008000]// main function[/color]
[color=0000FF]template[/color]<typename type>
[color=0000FF]void [/color][color=FF0000]stack[/color]<type>::[color=D04000]push[/color]([color=0000FF]const [/color]type& value)
{
    [color=0000FF]if[/color]( ++_top >= _size ) [color=0000FF]throw [/color][color=008080]error_stack[/color]([color=FF00FF]"OVERFLOW"[/color]);
    _stack[ _top ] = value;
}
[color=0000FF]template[/color]<typename type>
[color=0000FF]void [/color][color=FF0000]stack[/color]<type>::[color=D04000]pop[/color]()
{
    [color=0000FF]if[/color]( [color=008080]empty[/color]() ) [color=0000FF]throw [/color][color=008080]error_stack[/color]([color=FF00FF]"DWONFLOW"[/color]);
    --_top;
}
[color=0000FF]template[/color]<typename type>
[color=0000FF]const [/color]type& [color=FF0000]stack[/color]<type>::[color=008080]top[/color]() [color=0000FF]const
[/color]{
    [color=0000FF]if[/color]( [color=008080]empty[/color]() ) [color=0000FF]throw [/color][color=008080]error_stack[/color]([color=FF00FF]"EMPTY"[/color]);
    [color=0000FF]return [/color]_stack[ _top ];
}
[color=008000]// overload operator[/color]
[color=008000]// use all of element in the stack to compare[/color]
[color=0000FF]template[/color]<typename type>
[color=FF0000]stack[/color]<type>& [color=FF0000]stack[/color]<type>::[color=0000FF]operator[/color]= ([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& source_stack)
{
    [color=0000FF]if[/color]( [color=0000FF]this [/color]!= &source_stack )
    {
        [color=0000FF]delete [/color][] _stack;
        _top = source_stack._top;  
        _stack = [color=0000FF]new [/color]type[ _size=source_stack._size ];
        [color=008080]copy_[/color]( source_stack );
    }
    [color=0000FF]return [/color]*[color=0000FF]this[/color];
}
[color=0000FF]template[/color]<typename type>
[color=0000FF]bool operator[/color]== ([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s1, [color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s2)
{
        [color=0000FF]if[/color]( s1._top == s2._top )
        {
            [color=0000FF]for[/color]([color=0000FF]int [/color]i = s1._top; i>=[color=800080]0 [/color]; --i)
            [color=0000FF]if[/color]( s1._stack[i] != s2._stack[i] ) [color=0000FF]return [/color]false;
            [color=0000FF]return [/color]true;
        }
        [color=0000FF]return [/color]false;
}
[color=0000FF]template[/color]<typename type>
[color=0000FF]inline bool operator[/color]!= ([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s1, [color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s2)
{
    [color=0000FF]return [/color]!(s1 == s2 );
}
[color=0000FF]template[/color]<typename type>
[color=0000FF]inline bool operator[/color]< ([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s1, [color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s2)
{
    [color=0000FF]if[/color]( s1._top < s2._top ) [color=0000FF]return [/color]true;
    [color=0000FF]else if[/color]( s1._top == s2._top )
    {
            [color=0000FF]for[/color]([color=0000FF]int [/color]i=s1._top; i>=[color=800080]0[/color]; --i)
            [color=0000FF]if[/color]( s1._stack[i] > s2._stack[i] ) [color=0000FF]return [/color]false;
            [color=0000FF]return [/color]true;
    }
    [color=0000FF]return [/color]false;
}
[color=0000FF]template[/color]<typename type>
[color=0000FF]inline bool operator[/color]> ([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s1, [color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s2)
{
    [color=0000FF]return  [/color]!(s1 < s2);
}
[color=0000FF]template[/color]<typename type>
[color=0000FF]inline bool operator[/color]<= ([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s1, [color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s2)
{
    [color=0000FF]return [/color]!(s1 > s2 );
}
[color=0000FF]template[/color]<typename type>
[color=0000FF]inline bool operator[/color]>= ([color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s1, [color=0000FF]const [/color][color=FF0000]stack[/color]<type>& s2)
{
    [color=0000FF]return [/color]!(s1 < s2 );
}
[color=FF0000]#endif
[/color][/size][/font][/quote]

TOP

发新话题