GStack.c++
1.09 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <assert.h>
#include "GStack.h"
template <class T>
GStack<T>::GStack (int size)
{
fBase = fTop = new T[size];
fSize = size;
}
template <class T>
GStack<T>::~GStack (void)
{
if (fBase)
delete[] fBase;
}
template <class T> void
GStack<T>::Push (const T& item)
{
assert (fTop - fBase < fSize);
if (fTop - fBase < fSize)
*fTop++ = item;
}
template <class T> Boolean
GStack<T>::Pop (T& item)
{
if (fTop == fBase)
return False;
item = *--fTop;
return True;
}
template <class T> int
GStack<T>::GetNum (void)
{
return fTop - fBase;
}
#ifndef NDEBUG
template <class T> Boolean
GStack<T>::Test (void)
{
GStack<int> intStack(3);
int x;
assert (intStack.GetNum () == 0);
intStack.Push (1);
intStack.Push (2);
intStack.Push (3);
assert (intStack.GetNum () == 3);
assert (intStack.Pop (x));
assert (x == 3);
assert (intStack.Pop (x));
assert (x == 2);
assert (intStack.Pop (x));
assert (x == 1);
assert (intStack.Pop (x) == False);
assert (intStack.GetNum () == 0);
return True;
}
#endif