• [数据结构] 链式栈


     数据结构的练习与巩固
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    1
    //栈的数据结构类型 2 template <class T> 3 class Stack() 4 { 5 Stack() {}; 6 virtual void Push(T& x) = 0; //进栈 7 virtual bool Pop(T& x) = 0; //出栈 8 virtual bool getTop(T& x)const = 0; //取得栈顶 9 virtual bool IsEmpty()const = 0; //判断栈是否空 10 virtual bool IsFull()const = 0; //判断栈是否满 11 virtual int getSize()const = 0; //获取栈长度 12 };
     1 //顺序栈
     2 const int stackIncrement = 20;             //栈的长度增加单位
     3 template <class T>
     4 class SeqStack :public Stack<T>
     5 {
     6 private:
     7     T* elements;
     8     int top;
     9     int maxSize;
    10     void overflowProcess();                //栈溢出处理
    11 
    12 public:
    13     SeqStack(int size = 50);               //栈的初始化
    14     ~SeqStack() { delete[]elements; }      //栈的删除
    15     void Push(const T& x);                 //进栈
    16     bool Pop(T& x);                        //出栈
    17     bool getTop(T& x);                     //获取栈顶
    18     bool IsEmpty()const { return top == -1; }          //是否栈空
    19     bool IsFull()const { return top == maxSize - 1; }  //是否栈满
    20     int getSize()const { return top + 1; }             //获取栈长
    21     void makeEmpty() { top == -1; }                    //置空栈
    22 };
    23 
    24 template <class T>
    25 void SeqStack<T>::overflowProcess()
    26 {
    27     T* newArray = new T[maxSize + stackIncrement];  //创建长度增加的数组
    28     if (newArray == NULL)                           //如果创建了空数组
    29           { cerr << "创建失败" << endl;     exit(1); }
    30     for (int i = 0; i <= top; i++)                  //逐项赋值给新数组
    31         newArray[i] = element[i]; 
    32     maxSize += stackIncrement;                      //将maxSize数值更新
    33     delete[]elements;                               //删除原有栈
    34     elements = newArray;                            //让elements指向新数组的首项
    35 };
    36 
    37 template <class T>
    38 void SeqStack<T>::Push(const T& x)
    39 {
    40     if (IsFull() == true)overflowProcess();         //如果栈长度不够,则进行栈溢出操作
    41     elements[++top] = x;                            //将值赋给新栈空间
    42 };
    43 
    44 template <class T>
    45 bool SeqStack<T>::Pop(T& x)
    46 {
    47     if (IsEmpty() == true)return false;             //如果栈空,则不进行操作
    48     x = elements[top--];                            //将值取出
    49     return true;
    50 };
    51 
    52 template <class T>
    53 bool SeqStack<T>::getTop(T& x)
    54 {
    55     if (IsEmpty() == true)return false;             //如果栈空,则不进行操作
    56     x = elements[top];                              //将值取出
    57     return true;
    58 };
  • 相关阅读:
    关于上传组件
    二分查找的时间复杂度
    commander.js
    执行上下文
    谷歌插件开发
    网站性能
    日记
    <<人间失格>>阅读
    Node.js 应该用在什么地方
    浅谈前后端分离与实践 之 nodejs 中间层服务
  • 原文地址:https://www.cnblogs.com/nagishiro/p/13154127.html
Copyright © 2020-2023  润新知