线性表之顺序栈

栈是限定仅在表尾(栈顶)进行插入删除操作的线性表,FILO:先进后出

一、顺序栈的头文件:SeqStack.h

 //顺序栈头文件
#include<iostream>
using namespace std;
//设置顺序栈的大小
const int StackSize = ;
template<class DataType>
//定义顺序栈的模板类型
class SeqStack{
public:
  //无参构造器,初始化栈顶指针
  SeqStack(){ top = -; }
  //析构函数为空
  ~SeqStack(){}
  //入栈操作,将元素入栈
  void Push(DataType x);
  //出栈操作,将栈顶元素弹出栈
  DataType Pop();
  //取出栈顶元素,不删除栈顶元素(即取出的元素还在栈内)
  DataType GetTop();
  //判断栈是否为空
  int IsEmpty();
private:
  //存放站元素的指针
  DataType data[StackSize];
  //栈顶指针:栈顶元素在数组中的下标
  int top;
}; //实现顺序栈入栈操作
template<class DataType>
void SeqStack<DataType>::Push(DataType x)
{
  //判断当前顺序栈是否已是满栈
  if (top == StackSize - )
  {
    throw "栈已满";
  }
  else
  {
    //如果当前顺序栈不满,则栈顶值栈向上移动一个单元
    top++;
    //给新的栈顶元素赋值
    data[top] = x;
  }
} //实现顺序栈出栈,弹出栈顶元素
template<class DataType>
DataType SeqStack<DataType>::Pop()
{
  //先判断是否是空栈
  if (top == -)
  {
    throw "栈是空栈";
  }
  else
  {
    //若不是空栈,则取出栈顶元素,并删除栈顶元素
    DataType x = data[top];
    //栈顶指针向下移动一个单元素
    top--;
    //返回栈顶元素的值
    return x;
  }
} //实现取出栈顶元素,但不删除取出的元素
template<class DataType>
DataType SeqStack<DataType>::GetTop()
{
  //先判断是否是空栈
  if (top == -)
  {
    throw "栈是空栈";
  }
  else
  {
    //若不是空栈,则取出栈顶元素的值,但不删除栈顶元素
    DataType x = data[top];
    //返回栈顶元素的值
    return x;
  }
} //实现判断顺序栈是否是空栈:栈空返回 1,否则返回 0
template<class DataType>
int SeqStack<DataType>::IsEmpty()
{   if (top == -)
  {
    return ;
  }
  else
  {
    return ;
  }
}

二、测试顺序栈的源文件:TestSeqStack.cpp

 //测试顺序栈
#include<iostream>
//引入顺序栈头文件
#include"SeqStack.h"
using namespace std;
int main()
{
  //创建一个顺序栈
  SeqStack<int> seqStack = SeqStack<int>();
  //判断是否是空栈
  cout << "此时栈是否是空栈:" << seqStack.IsEmpty() << endl;
  //入栈
  seqStack.Push();
  cout << "1 入栈了" << endl;
  //判断是否是空栈
  cout << "此时栈是否是空栈:" << seqStack.IsEmpty() << endl;
  //取出栈顶元素
  cout << "栈顶元素是:" << seqStack.GetTop() << endl;
  //出栈
  seqStack.Push();
  cout << "3 入栈了" << endl;
  //取出栈顶元素
  cout << "栈顶元素是:" << seqStack.GetTop() << endl;
  //出栈
  seqStack.Push();
  cout << "7 入栈了" << endl;
  //取出栈顶元素
  cout << "栈顶元素是:" << seqStack.GetTop() << endl;
  //出栈
  seqStack.Push();
  cout << "5 入栈了" << endl;
  //取出栈顶元素
  cout << "栈顶元素是:" << seqStack.GetTop() << endl;
  //出栈
  cout << "栈顶元素" << seqStack.Pop() << "出栈了" << endl;
  //取出栈顶元素
  cout << "栈顶元素是:" << seqStack.GetTop() << endl;
  //出栈
  return ;
}

 三、运行示例结果:

线性表之顺序栈C++实现-LMLPHP

05-11 07:46