您的位置:首页 > 理论基础 > 数据结构算法

数据结构之栈的顺序存储6-(入栈,出栈等)

2015-09-14 12:01 393 查看
用数组实现基本栈的操作,思路还是挺简单的,代码如下

//当栈顶指针top为0的时候为空栈 top == stacksize时栈满

#include <iostream>
#include <cstdlib>

using namespace std;

template<typename T>
class SqStack{
private:
T *base = NULL;
int top;		//栈顶指针
int stacksize;		//站容量
public:
SqStack(int i);			//构造容量为i的空栈
~SqStack();
void Push(T x);			//元素入栈
T Pop();				//元素出栈
T GetTop();				//获取栈顶元素
bool StackEmpty();		//检测栈是否为空
void ClearStack();		//清空栈
int StackLength();		//测定栈长度
void StackTranverse();		//遍历栈中元素
};

//构造容量为i的空栈
template<typename T>
SqStack<T>::SqStack(int i)
{
base = new T[i];
if (!base)
throw "内存分配失败 \n";
top = 0;
stacksize = i;
}

//元素入栈
template<typename T>
void SqStack<T>::Push(T x)
{
if (top == stacksize)
throw "栈已经满了 \n";
base[top++] = x;
}

//元素出栈
template<typename T>
T SqStack<T>::Pop()
{
if (top == 0)
throw "栈已经空了 \n";
T e = base[--top];
return e;
}

//获取栈顶元素
template<typename T>
T SqStack<T>::GetTop()
{
return base[top - 1];
}
//测定栈长度
template<typename T>
int SqStack<T>::StackLength()
{
return top;
}

//检测栈是否为空
template<typename T>
bool SqStack<T>::StackEmpty()
{
return StackLength() == 0;
}

//遍历栈中元素
template<typename T>
void SqStack<T>::StackTranverse()
{
for (int i = 0; i < top; ++i)
cout << base[i] << " ";
cout << endl;
}

//清空栈
template<typename T>
void SqStack<T>::ClearStack()
{
top = 0;		//栈顶指针记录元素数目
}

template<typename T>
SqStack<T>::~SqStack()
{
delete[] base;
top = 0;
stacksize = 0;
}

int main()
{
cout << "请输入你需要的栈容量:";
int i;
cin >> i;
SqStack<int> s(i);
cout << "依次向栈中放入1-5的连续数:";
for (int j = 1; j <= 5; ++j)
s.Push(j);
cout << "现在栈中的元素为:";
s.StackTranverse();
cout << "现在执行出栈操作:";
cout << "出栈的元素为:" << s.Pop() << endl;
cout << "栈的长度为:" << s.StackLength() << endl;
if (s.StackEmpty())
cout << "栈为空 \n";
else
cout << "栈不为空 \n";
cout << "现在栈中的元素为:";
s.StackTranverse();
cout << "向栈中放入10和11 \n";
s.Push(10);
s.Push(11);
cout << "现在栈中的元素为:";
s.StackTranverse();
cout << "栈顶元素为:" << s.GetTop() << endl;
cout << "现在开始清空栈 \n";
s.ClearStack();
if (s.StackEmpty())
cout << "栈为空 \n";
else
cout << "栈不为空 \n";

system("pause");
return 0;
}


运行结果如下



需要注意的是开始提供的栈的容量值要大于你实际放入的元素,要不然程序会产生异常!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息