目录
1.seqstack.h
#ifndef SEQSTACK_H
#define SEQSTACK_H
//手动实现顺序栈,要求实现数据结构中,所有栈的相关操作
#define MAXSIZE 10
template <typename T>
class Seqstack
{
private:
int top; // 栈顶下标
T data[MAXSIZE]; // 数据域
public:
// 无参构造函数, 初始化栈
Seqstack();
// 析构函数
~Seqstack();
// 判断栈空
bool isempty();
// 判断栈满
bool isfull();
// 入栈
bool push(T value);
// 出栈
bool pop(T &element);
// 获取栈顶元素
bool get_top(T &element);
// 清空栈
void close_stack();
};
#endif // SEQSTACK_H
2.seqstack.cpp
#include "seqstack.h"
#include <iostream>
using namespace std;
// 无参构造函数, 初始化栈
template <typename T>
Seqstack<T>::Seqstack() : top(-1){}
// 析构函数
template <typename T>
Seqstack<T>::~Seqstack() {}
// 判断栈空
template <typename T>
bool Seqstack<T>::isempty(){
return top == -1;
}
// 判断栈满
template <typename T>
bool Seqstack<T>::isfull(){
return top == MAXSIZE - 1;
}
// 入栈
template <typename T>
bool Seqstack<T>::push(T value){
// 判断栈满
if (isfull ()){
cout << "栈满,入栈失败" << endl;
return false;
} else {
data[++top] = value; // 入栈,top向后移动
return true;
}
}
// 出栈
template <typename T>
bool Seqstack<T>::pop(T &element){
// 判断栈空
if (isempty ()){
cout << "栈空,出栈失败" << endl;
return false;
} else {
element = data[top--]; // 出栈栈顶元素,top向前移动
return true;
}
}
// 获取栈顶元素
template <typename T>
bool Seqstack<T>::get_top(T &element){
// 判断栈空
if (isempty ()){
cout << "栈空,获取栈顶元素失败" << endl;
return false;
} else {
element = data[top]; // 获取栈顶元素
return true;
}
}
// 清空栈
template <typename T>
void Seqstack<T>::close_stack(){
top = -1;
}
3.main.c
#include "seqstack.h"
#include <iostream>
using namespace std;
int main()
{
cout << "****************栈****************" << endl;
// 创建栈对象
Seqstack<int> s;
int num = 0;
// 循环入栈
for (int i = 0; i < MAXSIZE; ++i) {
cout << "请输入元素:";
cin >> num;
// 入栈
s.push (num);
}
// 出栈
for (int i = 0; i < MAXSIZE; ++i) {
// 入栈
s.pop (num);
cout << num << "\t";
}
cout << endl;
s.pop (num); // 出栈
return 0;
}