zoukankan      html  css  js  c++  java
  • 7、群体类和群体数据的组织-4、顺序访问群体--栈类

    栈是一种线性群体,因此栈的数据可以用数组或链表来存储。

    由于栈的访问特性,故直接用数组类和链表类来解决栈的问题是不合适的,而是需要专门设计栈类。

    要完整地保存栈的信息,栈类的数据成员至少应该包括栈元素和栈顶指针。由于栈元素即可以用数组也可以用链表来存放,栈类的结构也就有了两种:基于数组和基于链表。基于数组时可以采用静态数组和动态数组。

    栈的基本状态有:一般状态、栈空、栈满。当栈中没有元素时称为栈空;当栈中元素个数达到上限时,称为栈满;栈中有元素,但未达到栈满状态时,即处于一般状态。

    无论采用那种数据结构,栈类中都应该包括下列基本操作:初始化、入栈、出栈、栈清空、访问栈顶元素、检测栈的状态(满、空)。

    栈类模板:

    #ifndef STACK_CLASS

    #define STACK_CLASS

    #include<iostream>

    #include<cstdlib>

    using namespace std;

    const int MaxStackSize = 50;//栈的大小,即栈中元素的最大个数

    //类的声明

    template <clas T>

    class Stack

    {

    private:  

    T stacklist[MaxStackSize];//数组,用于存放栈的元素  

    int top;//栈顶位置(数组下标)

    public:  Stack(void);//构造函数,初始化栈  

    void Push(const T& item);//将元素item压入栈

     T Pop(void);//将栈顶元素弹出栈  

    void ClearStack(void);//将栈清空  

    T Peek(void)const;//访问栈顶元素

     int StackEmpty(void)const;//测试是否栈满  

    int StackFull(void)const;//测试是否栈空

    };

    //类的实现

    template<class T>

    Stack<T>::Stack(void) :top(-1)   //构造函数,栈顶初始化为-1

    {}

    template <class T>

    void Stack<T>::Push(const T& item)//将元素item压入栈

    {

     if (top == MaxStackSize - 1)//如果栈满,程序终止  

    {  

     std::cerr << "Stack overflow!" << endl;  

     exit(1);

     }

     top++;//栈顶指针增1  

    stacklist[top]=item;//将新元素压入栈顶

    }

    template <class T> T Stack<T>::Pop(void) //将栈顶元素弹出栈

    {  

    T temp;  if (top == -1)//如果栈空,程序终止

     {   

    std::cerr << "Attempt to pop empty stack!" << endl;  

     exit(1);

     }

     temp = stacklist[top];//取出栈顶元素

     top--;//栈顶指针自减  

    return temp;//返回栈顶元素

    }

    template <class T> T Stack<T>::Peek(void)const  //访问栈顶元素

    {

     if (top == -1) //如果栈空,程序终止

     {  

     std::cerr << "Attempt to an empty statck!" << endl;  

     exit(1);

     }

     return stacklist[top];//返回栈顶元素

    }

    template <class T>

    int Stack<T>::StackEmpty(void)const //测试栈是否为空

    {

     return top == -1;//如果栈空则返回TRUE,否则返回FALSE

    }

    template <class T> int Stack<T>::StackFull(void)const//测试是否满

    {

     return top == MaxStackSize - 1;//如果栈满则返回TRUE,否则返回FALSE

    }

    template <class T>

    void Stack<T>::ClearStack(void)//清空栈

    {  top = -1; }

    #endif//STACK_CLASS

  • 相关阅读:
    OC中数组的使用方法
    fuel Explain
    OpenStack images
    linux dd实现磁盘完整全盘镜像备份backup,恢复recover(restore)
    linux大事件集
    Ruiy classicsQuotations
    OpenSuSE zypper OpenStack Icehouse repoAdd
    OpenSuSE zypper repo及Desktop媒体播放器设置 for OpenSuSE12.
    OpenSuSE查看指定软件包是否安装(OpenSuSE使用RPM作为默认的软件包维护管理工具)
    OpenStack开启sshd
  • 原文地址:https://www.cnblogs.com/gary-guo/p/6298042.html
Copyright © 2011-2022 走看看