自己的数据结构库
以学习为目的,创建自己的库,以后不断更新。代码很垃圾,日后会渐渐完善.....
有兴趣的朋友可以测试一下//
复制内容到剪贴板代码:
[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]
搜索更多相关主题的帖子:
数据结构 MyDS yzfy 垃圾 兴趣