• 线性表之顺序栈C++实现


    线性表之顺序栈

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

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

      1 //顺序栈头文件
      2 #include<iostream>
      3 using namespace std;
      4 //设置顺序栈的大小
      5 const int StackSize = 10;
      6 template<class DataType>
      7 //定义顺序栈的模板类型
      8 class SeqStack{
      9 public:
     10   //无参构造器,初始化栈顶指针
     11   SeqStack(){ top = -1; }
     12   //析构函数为空
     13   ~SeqStack(){}
     14   //入栈操作,将元素入栈
     15   void Push(DataType x);
     16   //出栈操作,将栈顶元素弹出栈
     17   DataType Pop();
     18   //取出栈顶元素,不删除栈顶元素(即取出的元素还在栈内)
     19   DataType GetTop();
     20   //判断栈是否为空
     21   int IsEmpty();
     22 private:
     23   //存放站元素的指针
     24   DataType data[StackSize];
     25   //栈顶指针:栈顶元素在数组中的下标
     26   int top;
     27 };
     28 
     29  
     30 
     31 //实现顺序栈入栈操作
     32 template<class DataType>
     33 void SeqStack<DataType>::Push(DataType x)
     34 {
     35   //判断当前顺序栈是否已是满栈
     36   if (top == StackSize - 1)
     37   {
     38     throw "栈已满";
     39   }
     40   else
     41   {
     42     //如果当前顺序栈不满,则栈顶值栈向上移动一个单元
     43     top++;
     44     //给新的栈顶元素赋值
     45     data[top] = x;
     46   }
     47 }
     48 
     49  
     50 
     51 //实现顺序栈出栈,弹出栈顶元素
     52 template<class DataType>
     53 DataType SeqStack<DataType>::Pop()
     54 {
     55   //先判断是否是空栈
     56   if (top == -1)
     57   {
     58     throw "栈是空栈";
     59   }
     60   else
     61   {
     62     //若不是空栈,则取出栈顶元素,并删除栈顶元素
     63     DataType x = data[top];
     64     //栈顶指针向下移动一个单元素
     65     top--;
     66     //返回栈顶元素的值
     67     return x;
     68   }
     69 }
     70 
     71  
     72 
     73 //实现取出栈顶元素,但不删除取出的元素
     74 template<class DataType>
     75 DataType SeqStack<DataType>::GetTop()
     76 {
     77   //先判断是否是空栈
     78   if (top == -1)
     79   {
     80     throw "栈是空栈";
     81   }
     82   else
     83   {
     84     //若不是空栈,则取出栈顶元素的值,但不删除栈顶元素
     85     DataType x = data[top];
     86     //返回栈顶元素的值
     87     return x;
     88   }
     89 }
     90 
     91  
     92 
     93 //实现判断顺序栈是否是空栈:栈空返回 1,否则返回 0
     94 template<class DataType>
     95 int SeqStack<DataType>::IsEmpty()
     96 {
     97 
     98   if (top == -1)
     99   {
    100     return 1;
    101   }
    102   else
    103   {
    104     return 0;
    105   }
    106 }

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

     1 //测试顺序栈
     2 #include<iostream>
     3 //引入顺序栈头文件
     4 #include"SeqStack.h"
     5 using namespace std;
     6 int main()
     7 {
     8   //创建一个顺序栈
     9   SeqStack<int> seqStack = SeqStack<int>();
    10   //判断是否是空栈
    11   cout << "此时栈是否是空栈:" << seqStack.IsEmpty() << endl;
    12   //入栈
    13   seqStack.Push(1);
    14   cout << "1 入栈了" << endl;
    15   //判断是否是空栈
    16   cout << "此时栈是否是空栈:" << seqStack.IsEmpty() << endl;
    17   //取出栈顶元素
    18   cout << "栈顶元素是:" << seqStack.GetTop() << endl;
    19   //出栈
    20   seqStack.Push(3);
    21   cout << "3 入栈了" << endl;
    22   //取出栈顶元素
    23   cout << "栈顶元素是:" << seqStack.GetTop() << endl;
    24   //出栈
    25   seqStack.Push(7);
    26   cout << "7 入栈了" << endl;
    27   //取出栈顶元素
    28   cout << "栈顶元素是:" << seqStack.GetTop() << endl;
    29   //出栈
    30   seqStack.Push(5);
    31   cout << "5 入栈了" << endl;
    32   //取出栈顶元素
    33   cout << "栈顶元素是:" << seqStack.GetTop() << endl;
    34   //出栈
    35   cout << "栈顶元素" << seqStack.Pop() << "出栈了" << endl;
    36   //取出栈顶元素
    37   cout << "栈顶元素是:" << seqStack.GetTop() << endl;
    38   //出栈
    39   return 0;
    40 }

     三、运行示例结果:

  • 相关阅读:
    未解
    HDU 4642 Fliping game 解题报告
    HDU 4639 Hehe 解题报告
    深入浅出Node.js (11)
    JS文本框获取焦点
    深入理解 BFC
    JS 中函数名后面加与不加括号的区别
    ES6 箭头函数
    sublime 格式化代码
    <!--more-->搭建的博客设置主页内容高度
  • 原文地址:https://www.cnblogs.com/zfc-java/p/6664330.html
Copyright © 2020-2023  润新知