blob: 8cbc5d59f34649cd31d57f73e45872efdcb692a5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
// tstack1.h
// Class template Stack
#ifndef TSTACK1_H
#define TSTACK1_H
template< class T, int elements > // # of elements in the stack
class Stack {
public:
Stack(); // default constructor
// ~Stack() { delete [] stackPtr; } // destructor (only for dynamic version)
bool push( const T& ); // push an element onto the stack
bool pop( T& ); // pop an element off the stack
private:
int top; // location of the top element
T stackHolder[elements]; // static array for stack
// T *stackPtr; // pointer to the stack (only for dynamic version)
bool isEmpty() const { return top == -1; } // utility
bool isFull() const { return top == elements - 1; } // functions
};
// Constructor with default size 10
template< class T, int elements >
Stack< T, elements>::Stack()
{
top = -1; // Stack is initially empty
// stackPtr = new T[ elements ]; // dynamically allocate space for elements (not used)
}
// Push an element onto the stack
// return 1 if successful, 0 otherwise
template< class T, int elements >
bool Stack< T, elements >::push( const T &pushValue )
{
if ( !isFull() ) {
stackHolder[ ++top ] = pushValue; // place item in Stack
return true; // push successful
}
return false; // push unsuccessful
}
// Pop an element off the stack
template< class T, int elements >
bool Stack< T, elements >::pop( T &popValue )
{
if ( !isEmpty() ) {
popValue = stackHolder[ top-- ]; // remove item from Stack
return true; // pop successful
}
return false; // pop unsuccessful
}
#endif
|