📄 stacktem.cpp
字号:
//这个程序在本书所带软盘中。文件名为STACKTEM.CPP
//这个程序利用类模板模拟堆栈。
#include <iostream.h>
#include <iomanip.h>
template<class T>
class Stack {
public:
Stack(int max_size);
T push(T data);
T pop(void);
int empty(void)
{
return(is_empty);
}
int full(void)
{
return(is_full);
}
private:
T *array; //抽象数据类型数组
int items; //在堆栈中的数据数目
int is_empty; //栈空时为真
int is_full; //栈满时为真
int size; //堆栈可储存的最大容量
};
template<class T> //编写构造函数
Stack<T> :: Stack(int max_size)
{
array = new T[max_size]; //动态分配内存
items = 0;
is_empty = 1;
is_full = 0;
size = max_size;
}
template<class T> //编写出栈成员子程序
T Stack<T> :: pop(void)
{
if (empty())
return(0);
else
{
if (--items == 0) //栈空时is_empty为真
is_empty = 1;
is_full = 0;
return(array[items]);
}
}
template<class T> //编写入栈成员子程序
T Stack<T> :: push(T data)
{
if (full()) //栈已满则返回0
return(0);
else
{
is_empty = 0;
array[items++] = data;
if (items == size) //到达最大容量时is_full为真
is_full = 1;
return(data);
}
}
void main(void)
{
Stack<char> ch_stack(26); //定义字符型堆栈,最大容量为26个字符
Stack<int> int_stack(12); //定义整数型堆栈,最大容量为12个整数
Stack<float> f_stack(15); //定义实数型堆栈,最大容量为15个实数
for (char ch = 'A'; !ch_stack.full(); ch++) //入栈
ch_stack.push(ch);
while (!ch_stack.empty()) //出栈
cout << ch_stack.pop() << endl;
cout << endl;
for (int i = 0; !int_stack.full(); i++) //入栈
int_stack.push(i);
while (!int_stack.empty()) //出栈
cout << int_stack.pop() << endl;
cout << endl;
for (i = 0; ! f_stack.full(); i++) //入栈
f_stack.push(i * 3.141596);
while (!f_stack.empty()) //出栈
cout << setiosflags(ios::showpoint) << f_stack.pop() << endl;
}
/*这个程序运行后将显示如下输出结果:
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
11
10
9
8
7
6
5
4
3
2
1
0
43.9823
40.8407
37.6992
34.5576
31.4160
28.2744
25.1328
21.9912
18.8496
15.7080
12.5664
9.42479
6.28319
3.14160
0.00000
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -