Stack Class 实现
Stack.h
Stack.cpp
测试main.cpp
1#ifndef STACK_H
2#define STACK_H
3
4
5#define SIZE_INIT 100
6#define SIZE_INCREMENT 100
7template <typename Type> class Stack
8{
9 public:
10 Stack();
11 ~Stack();
12 int getLength() const { return length; }
13 Type getTop();
14 bool empty(){ return (top == base); }
15 bool full(){ return (length >= size); }
16 void push(const Type &val);
17 Type pop();
18 void makeEmpty();
19 void visit();
20
21
22 private:
23 Type *base;
24 Type *top;
25 int length;
26 int size;
27};
28
29#include "Stack.cpp"
30
31
32#endif
2#define STACK_H
3
4
5#define SIZE_INIT 100
6#define SIZE_INCREMENT 100
7template <typename Type> class Stack
8{
9 public:
10 Stack();
11 ~Stack();
12 int getLength() const { return length; }
13 Type getTop();
14 bool empty(){ return (top == base); }
15 bool full(){ return (length >= size); }
16 void push(const Type &val);
17 Type pop();
18 void makeEmpty();
19 void visit();
20
21
22 private:
23 Type *base;
24 Type *top;
25 int length;
26 int size;
27};
28
29#include "Stack.cpp"
30
31
32#endif
Stack.cpp
1//for Stack class implement
2
3template <typename Type> Stack<Type>::Stack() : length(0), size(SIZE_INIT)
4{
5 base = new Type[SIZE_INIT];
6 top = base;
7}
8
9template <typename Type> Stack<Type>::~Stack()
10{
11 delete [] base;
12
13}
14
15template <typename Type> Type Stack<Type>::getTop()
16{
17 if(empty())
18 {
19 cerr << "Stack empty: getTop()\n";
20 exit(-1);
21 }
22
23 return *(top-1);
24}
25
26template <typename Type> void Stack<Type>::push(const Type &val)
27{
28 if(full())
29 {
30 cerr << "Stack full: push()\n";
31 exit(-1);
32 }
33
34 *top = val;
35 top++;
36 length++;
37}
38
39template <typename Type> Type Stack<Type>::pop()
40{
41 if(empty())
42 {
43 cerr << "Stack empty: pop()\n";
44 exit(-1);
45 }
46
47 Type val = *(top-1);
48 top--;
49 length--;
50
51 return val;
52}
53
54template <typename Type> void Stack<Type>::makeEmpty()
55{
56 if(empty())
57 {
58 return;
59 }
60
61 while(top != base)
62 {
63 pop();
64 }
65
66}
67
68
69template <typename Type> void Stack<Type>::visit()
70{
71 if(empty())
72 {
73 cout << "empty, no element visited\n";
74 return;
75 }
76
77 Type *ptr = base;
78
79 cout << "[bottom: ";
80 while(ptr != top)
81 {
82 cout << *ptr << " ";
83 ptr++;
84 }
85 cout << ":top]\n";
86
87}
2
3template <typename Type> Stack<Type>::Stack() : length(0), size(SIZE_INIT)
4{
5 base = new Type[SIZE_INIT];
6 top = base;
7}
8
9template <typename Type> Stack<Type>::~Stack()
10{
11 delete [] base;
12
13}
14
15template <typename Type> Type Stack<Type>::getTop()
16{
17 if(empty())
18 {
19 cerr << "Stack empty: getTop()\n";
20 exit(-1);
21 }
22
23 return *(top-1);
24}
25
26template <typename Type> void Stack<Type>::push(const Type &val)
27{
28 if(full())
29 {
30 cerr << "Stack full: push()\n";
31 exit(-1);
32 }
33
34 *top = val;
35 top++;
36 length++;
37}
38
39template <typename Type> Type Stack<Type>::pop()
40{
41 if(empty())
42 {
43 cerr << "Stack empty: pop()\n";
44 exit(-1);
45 }
46
47 Type val = *(top-1);
48 top--;
49 length--;
50
51 return val;
52}
53
54template <typename Type> void Stack<Type>::makeEmpty()
55{
56 if(empty())
57 {
58 return;
59 }
60
61 while(top != base)
62 {
63 pop();
64 }
65
66}
67
68
69template <typename Type> void Stack<Type>::visit()
70{
71 if(empty())
72 {
73 cout << "empty, no element visited\n";
74 return;
75 }
76
77 Type *ptr = base;
78
79 cout << "[bottom: ";
80 while(ptr != top)
81 {
82 cout << *ptr << " ";
83 ptr++;
84 }
85 cout << ":top]\n";
86
87}
测试main.cpp
1#include <iostream>
2#include <string>
3#include "Stack.h"
4using namespace std;
5
6int main()
7{
8 Stack<int> iStack;
9 iStack.push(2);
10 iStack.push(5);
11 iStack.push(7);
12 iStack.push(78);
13 iStack.push(32);
14 iStack.push(93);
15
16 //cout << iStack.getLength() << " " << iStack.getTop() << ;
17
18 iStack.visit();
19
20 iStack.pop();
21
22 iStack.visit();
23
24 iStack.pop();
25
26 iStack.visit();
27
28 iStack.makeEmpty();
29
30 //cout << iStack.getLength() ;
31 //cout << " " << iStack.getTop();
32
33 Stack<string> strStack;
34 strStack.push("I");
35 strStack.push("am");
36 strStack.push("a");
37 strStack.push("graduate");
38 strStack.push("student");
39 strStack.push("in");
40 strStack.push("SJTU");
41
42 strStack.visit();
43
44 strStack.pop();
45
46 strStack.visit();
47
48 strStack.pop();
49
50 strStack.visit();
51
52
53
54 return 0;
55
56}
2#include <string>
3#include "Stack.h"
4using namespace std;
5
6int main()
7{
8 Stack<int> iStack;
9 iStack.push(2);
10 iStack.push(5);
11 iStack.push(7);
12 iStack.push(78);
13 iStack.push(32);
14 iStack.push(93);
15
16 //cout << iStack.getLength() << " " << iStack.getTop() << ;
17
18 iStack.visit();
19
20 iStack.pop();
21
22 iStack.visit();
23
24 iStack.pop();
25
26 iStack.visit();
27
28 iStack.makeEmpty();
29
30 //cout << iStack.getLength() ;
31 //cout << " " << iStack.getTop();
32
33 Stack<string> strStack;
34 strStack.push("I");
35 strStack.push("am");
36 strStack.push("a");
37 strStack.push("graduate");
38 strStack.push("student");
39 strStack.push("in");
40 strStack.push("SJTU");
41
42 strStack.visit();
43
44 strStack.pop();
45
46 strStack.visit();
47
48 strStack.pop();
49
50 strStack.visit();
51
52
53
54 return 0;
55
56}