zoukankan      html  css  js  c++  java
  • 线性表之顺序栈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 }

     三、运行示例结果:

  • 相关阅读:
    【转】Geary's C
    ArcGIS中影像与影像,影像与点云之间的配准
    [转] EPSG CODE的含义
    地图投影
    【从翻译mos文章】oracle linux 和外部存储系统 关系
    找呀志_使用SQLiteDatabase增删改提供的搜索方法和事务
    [049] 微信公众平台视频公开课1说话-基础知识
    我看到西电通院考试——学生应该做的事情?
    使用 Eclipse 的 SVN 主要插件创建项目/支/标签
    【SSH三个框架】Hibernate第十篇基础:inverse属性具体解释
  • 原文地址:https://www.cnblogs.com/zfc-java/p/6664330.html
Copyright © 2011-2022 走看看