栈数组实现
stack_with_array.h
#ifndef STACK_WITH_ARRAY_H
#define STACK_WITH_ARRAY_H
#include <cstdlib> // provides size_t
template < class Item >
class stack
{
public:
typedef std::size_t size_type;
typedef Item value_type;
static const size_type CAPACITY = 30;
stack( ) {used = 0;} ;
void push(const Item& entry) ;
void pop( ) ;
bool empty( ) const {return used == 0 ;}
size_type size( ) const {return used ;}
Item top( ) const ;
private:
Item data[ CAPACITY ] ;
size_type used ;
};
#endif
stack_with_array.cpp
#include <cassert>
template <class Item>
const typename stack<Item>::size_type stack<Item>::CAPACITY ;
template <class Item>
void stack<Item>::push(const Item& entry)
{
assert(size( ) < CAPACITY);
data[ used] = entry ;
++used ;
}
template <class Item>
void stack<Item>::pop( )
{
assert( !empty( ) ) ;
--used ;
}
template <class Item>
Item stack<Item>::top( ) const
{
assert(!empty()) ;
return data[used - 1] ;
}
栈链表实现
stack_with_list.h
#ifndef STACK_WITH_LIST_H
#define STACK_WITH_LIST_H
#include <cstdlib>
#include <list>
template <class Item>
class stack
{
public:
//TYPEDEFS
typedef std::size_t size_type ;
typedef Item value_type ;
//CONSTRCTORS AND EDSTRUCTOR
stack( ) {top_ptr = NULL ; }
~stack( ){ top_ptr.clear( ) ;}
//MODIFICATION MEMBER FUNCTION
void push( const Item& entry ) ;
void pop( ) ;
void operator =(const stack& source ) ;
//CONSTANT MEMBER FUNCTIONS
size_type size( ) {return top_ptr->size( ) ; }
bool empty( ) const {return top_ptr == NULL ;}
Item top ( ) const ;
private:
list *top_ptr ;
};
#include "stack_with_list.template"
#endif