• C++ 栈的实现


    #ifndef _STACK_H
    #define _STACK_H
    #pragma once

    template< class T >
    class Stack
    {
    public:
    Stack( void ) : size( 0 ), capacity( 1 ),_( new T[ capacity ] ){} ;//构造函数 成员是按照他们在类中出现的顺序进行初始化的,而不是按照他们在初始化列表出现的顺序初始化的

    Stack( const Stack& ) ;//拷贝构造函数
    ~Stack( void ) ;//析构函数
    Stack& operator = ( const Stack& ) ;//重载赋值运算符

    int Size( void ) const ;//返回栈中元素数目
    int Capacity( void ) const ;//返回当前栈的容量
    bool IsEmpty( void ) const ;//判断栈是否为空栈
    T& Top( void ) const ;//返回栈顶元素
    void Push( const T& ) ;//将元素压入栈中,当元素数目超过栈的容量时重建栈
    void Pop( void ) ;//弹出栈顶元素
    protected:
    int size ;//栈中元素数目
    int capacity ;//栈的容量
    void Expand( void ) ;//扩充栈
    void Decrease( void ) ;//压缩栈
    private:
    T* _ ;//保存栈中元素的数组
    } ;

    template< class T >
    Stack< T >::Stack( const Stack< T > & s ) : size( s.size ) , capacity( s.capacity ),_( new T[ capacity ] )
    {
    for( int i = 0 ; i < capacity ; ++i )
    _[ i ] = s._[ i ] ;
    }

    template< class T >
    Stack< T >::~Stack( void )
    {
    delete [ ]_ ;
    }

    template< class T >
    Stack< T >& Stack< T >::operator = ( const Stack& s )
    {
    _ =new T[ s.capacity ] ;
    size = s.size ;
    capatity = s.capacity ;
    for( int i = 0 ; i < capacity ; ++i )
    _[ i ] = s._[ i ] ;
    }

    template< class T >
    int Stack< T >::Size( void ) const
    {
    return size ;
    }

    template< class T >
    int Stack< T >::Capacity( void ) const
    {
    return capacity ;
    }

    template< class T >
    bool Stack< T >::IsEmpty( void ) const
    {
    return size == 0 ;
    }

    template< class T >
    T& Stack< T >::Top( void ) const
    {
    return _[ size - 1 ] ;
    }

    template< class T >
    void Stack< T >::Pop( void )
    {
    if( size == capacity / 2 ) Decrease( ) ;
    --size ;
    }

    template< class T >
    void Stack< T >::Push( const T& obj )
    {
    if( size == capacity ) Expand( ) ;
    _[ size++ ] = obj ;
    }

    template< class T >
    void Stack< T >::Expand( void )
    {
    capacity *= 2 ;//double the capacity of the storage array
    T* __ = new T[ capacity ] ;
    for( int i = 0 ; i < size ; ++i ) __[ i ] = _[ i ] ;
    delete [ ]_ ;
    _ = __ ;
    }

    template< class T >
    void Stack< T >::Decrease( void )
    {
    capacity /= 2 ;//half the capacity of the storage array
    T* __ = new T[ capacity ] ;
    for( int i = 0 ; i < size ; ++i )
    __[ i ] = _[ i ] ;
    delete [ ]_ ;
    _ = __ ;
    }
    #endif

  • 相关阅读:
    Go---第七章:接口(小知识点笔记)
    Go---第六章:方法(小知识点笔记)
    Go---第五章:函数(小知识点笔记)
    解决paramiko获取远程脚本延时返回数据的问题
    python字典合并
    关于iperf的使用
    python安装MySQLdb:出错Microsoft Visual C++ 9.0 is required
    v2r
    Win10 HotCorner热角小程序
    去掉显卡桌面右键菜单
  • 原文地址:https://www.cnblogs.com/de0319gh/p/3253878.html
Copyright © 2020-2023  润新知