线性表之顺序栈

栈是限定仅在表尾(栈顶)进行插入删除操作的线性表,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++实现的更多相关文章

  1. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现

    注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...

  2. C#线性表之顺序表

    线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...

  3. D_S 线性表的顺序表示和实现

    线性表的顺序表示又称为顺序存储结构或顺序映像 顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构,简言之,逻辑上相邻,物理上也相邻 顺序存储方法:用一组地址连续的存储单元依次存 ...

  4. javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现

    线性表(linear list)是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成. 其中: 数据元素的个数n定义为 ...

  5. c/c++ 线性表之顺序表

    线性表之顺序表 存储在连续的内存空间,和数组一样. 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit). 实现了以下功能: 函数 功能描述 ...

  6. 已知长度为n的线性表采用顺序结构,写一算法删除该线性表中所有值为item的元素

    /** * @author:(LiberHome) * @date:Created in 2019/2/27 23:34 * @description: * @version:$ */ /*已知长度为 ...

  7. 线性表之顺序表C++实现

    线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件 #include<iostream> ; //定义顺序表SeqList的模板类 template<class ...

  8. 线性表中顺序表的的理解和实现(java)

    线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像.通常,称这种存储结构的线性表为顺序表.特点是:逻辑上相邻的数据元素,其物理次序上也 ...

  9. [C++]数据结构:线性表之顺序表

    1 顺序表 ADT + Status InitList(SeqList &L) 初始化顺序表 + void printList(SeqList L) 遍历顺序表 + int ListLengt ...

随机推荐

  1. 【译】第十三篇 Integration Services:SSIS变量

    本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将 ...

  2. JS设计模式——8.桥接模式

    桥接模式的用途 在实现API的时候,桥接模式非常有用. 在设计一个JavaScript API的时候,可以用这个模式来弱化它与使用它的类和对象之间的耦合. 示例:事件监听器 桥接模式最常见和实际的应用 ...

  3. [转]双线性插值(Bilinear interpolation)

    1,原理 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值,兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中的插值效果和运算速度 ...

  4. transparent 透明效果

    background-color:transparent;就是把背景色设置为透明. 实际上background默认的颜色就是透明的属性.所以写和不写都是一样的 span{ width: 0; heig ...

  5. 87.在ModelSim中添加Xilinx ISE仿真库

    在ModelSim中添加Xilinx ISE仿真库 说明: l ModelSim一定要安装在不带空格的目录下,即不要安装在“Program Files”目录下.如作者是安装在D:\softwares\ ...

  6. easyui表单提交验证form

    方式一,不需要考虑jquery.easyui.min.js版本 <script> $(function () { //针对 设置 novalidate:true $('.validateb ...

  7. python网络编程-协程(协程说明,greenlet,gevent)

    一:什么是协程 协程(Coroutine):,又称微线程.协程是一种用户态的轻量级线程.是由用户自己控制,CPU根本不知道协程存在. 协程拥有自己的寄存器上下文和栈. 协程调度切换时,将寄存器上下文和 ...

  8. JQuery怎么实现页面左侧菜单刷新后保留鼠标点击addclass的样式?

    $('ul.main-menu li a').each(function(){ if($($(this))[0].href==String(window.location)) $(this).pare ...

  9. SQL行列转换的另一种方法

    create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)insert into tb values('张三' , '语文' , 74)inse ...

  10. bzoj 4034(DFS序+线段树)

    这个题多了一个操作难度直线上升,看完题解才会写 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 ...