// EXP2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream> //引用输入输出流
using namespace std;
const int StackSize = 10; //10只是示例性的数据,可以根据实际问题具体定义
template <class T> //定义模板类SeqStack
class SeqStack
{
public:
SeqStack(); //构造函数,栈的初始化
~SeqStack(); //析构函数
void Push(T x); //将元素x入栈
T Pop(); //将栈顶元素弹出
T GetTop(); //取栈顶元素(并不删除)
bool Empty(); //判断栈是否为空
void PrintStack(); //输出栈内元素
private:
T data[StackSize]; //存放栈元素的数组
int top; //栈顶指针,指示栈顶元素在数组中的下标
};
template <class T>
SeqStack<T>::SeqStack()
{
top = -1;
}
template <class T>
SeqStack<T>::~SeqStack()
{}
template <class T>
void SeqStack<T>::Push(T x)
{
if (top == StackSize - 1) throw"上溢";
top++;
data[top] = x;
}
template <class T>
T SeqStack<T>::Pop()
{
T x;
if (top == -1) throw "下溢";
x = data[top--];
return x;
}
template <class T>
T SeqStack<T>::GetTop()
{
if (top != -1)
return data[top];
}
template <class T>
bool SeqStack<T>::Empty()
{
if (top == -1) return 1;
else return 0;
}
template <class T>
void SeqStack<T>::PrintStack()
{
for (int i = top; i >= 0; i--)
{
cout << data[i] << " ";
}
cout << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
SeqStack<int> a; //创建模板类的实例
if (a.Empty())
{
cout << "栈空,执行入栈操作:" << endl;
cout << "对1-5执行入栈操作:" << endl;
try
{
for (int i = 0; i<5; i++)
a.Push(i + 1);
}
catch (char *wrong)
{
cout << wrong;
}
cout << "栈内元素为:";
a.PrintStack();
cout << "栈顶元素为:" << endl; //取栈顶元素
cout << a.GetTop() << endl;
cout << "执行出栈操作:" << endl;
cout << a.Pop() << endl; //执行出栈操作
cout << "栈顶元素为:" << endl;
cout << a.GetTop() << endl;
}
else
{
cout << "栈不空" << endl;
}
cout << "栈内元素为:";
a.PrintStack();
system("pause");
return 0;
}
栈+线性
最新推荐文章于 2022-10-16 13:12:21 发布