zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java生成json字符串的方法
    JSON的三种解析方式
    Android Studio你不知道的调试技巧
    Android 打开URL
    build.gradle中引入jar
    Spark RDD/Core 编程 API入门系列之map、filter、textFile、cache、对Job输出结果进行升和降序、union、groupByKey、join、reduce、lookup(一)
    NovaMind *的安装、和谐破解到永久使用
    小Q书桌的下载、安装和使用
    作业提交过程分析(源码)
    SparkContext的初始化过程分析(源码)
  • 原文地址:https://www.cnblogs.com/de0319gh/p/3253878.html
Copyright © 2011-2022 走看看