数据结构:栈的实现

下面使用C++实现顺序栈~:

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
using namespace std;
template <class T>
class Stack
{
public:
Stack(int max_stack_size = 10);
~Stack(); //析构函数
bool (); //判空
bool IsFull(); //判满
T Top(); //取栈顶元素
Stack<T>& Add(const T& x); //入栈
Stack<T>& Del(T& x); //出栈
void MakeEmpty(); //栈置空
void Output(); //输出栈元素
private:
int top; //栈顶指针
int MaxTop; //栈容量
T *stack; //栈数组
};
template<class T>
Stack<T>::Stack(int max_stack_size)
{
MaxTop = max_stack_size - 1;
stack = new T[max_stack_size];
top = -1;
}
template<class T>
Stack<T>::~Stack()
{
delete [] stack;
}
template<class T>
bool Stack<T>::IsEmpty()
{
return top == -1;
}
大专栏  s="keyword">template<class T>
bool Stack<T>::IsFull()
{
return top == MaxTop;
}
template<class T>
void Stack<T>::MakeEmpty()
{
top = -1;
}
template<class T>
Stack<T>& Stack<T>::Add(const T& x)
{
if (IsFull())
{
cout<<"塞不下了"<<endl;
return *this;
}
top = top + 1;
stack[top] = x;
return *this;
}
template<class T>
Stack<T>& Stack<T>::Del(T& x)
{
if (IsEmpty())
{
cout<<"求塞"<<endl;
return *this;
}
x = stack[top];
top = top - 1;
return *this;
}
template<class T>
T Stack<T>::Top()
{
int x;
if (IsEmpty())
{
cout<<"求塞"<<endl;
return 0;
}
x = stack[top];
return x;
}
template<class T>
void Stack<T>::Output()
{
if (IsEmpty())
{
cout<<"no element"<<endl;
return;
}
for (int i = top; i > -1; --i)
{
cout << stack[i] << "->";
}
cout << "bottom" << endl;
}
int main()
{
/**
* stack1: 测试入栈、出栈、取栈顶元素操作
* 1) 1,2,3,入栈,打印3->2->1->bottom
* 2) 出栈1次,打印2->1->bottom, 同时打印x=3
* 3) 取栈顶元素, 打印2->1->bottom, 同时打印y=2
*/
Stack<int> stack1;
int x; //出栈元素保存在x
int y; //取栈顶元素保存在y
stack1.Add(1);
stack1.Add(2);
stack1.Add(3);
stack1.Output();
stack1.Del(x);
stack1.Output();
cout << "x = " << x << endl;
y = stack1.Top();
stack1.Output();
cout << "y = " << y << endl;
/**
* stack2: 测试判断栈空、栈满
* 1) 取栈顶元素,提示栈空
* 2) 首先判断栈是否为空,为空则给出提示
* 3) 循环向栈中添加11个元素
* 4) 判断栈是否满,栈满则给出提示
*/
Stack<int> stack2;
stack2.Top();
if (stack2.IsEmpty())
{
cout << "栈 stack2 为空" << endl;
}
for (int i = 0; i <= 10; ++i)
{
stack2.Add(i);
}
if (stack2.IsFull())
{
cout << "栈 stack2 为满" << endl;
}
cout << "stack2:";
stack2.Output();
}
原文地址:https://www.cnblogs.com/lijianming180/p/12409876.html