summaryrefslogtreecommitdiffstats
path: root/Bachelor/Prog2/Stack/Tstack1.h
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