• 顺序栈


    头文件:

     1 #ifndef STACK_H
     2 #define STACK_H
     3 #include <iostream>
     4 #include <fstream>
     5 #include <assert.h>
     6 using namespace std;
     7 
     8 const int stackIncreament=20;
     9 
    10 template <class T>
    11 class SeqStack
    12 {
    13 public:
    14     //SeqStack(){}  //new
    15     SeqStack(int sz);
    16     //~SeqStack();
    17     void Push(const T &x);
    18     void Pop(const T &x);
    19     bool getTop(T &x);
    20     bool isEmpty()const;
    21     bool isFull()const;
    22     //int getSize();
    23     //void makeEmpty();
    24     //friend ostream & operator<<(ostream& os,SeqStack<T> &S);      // '<<'后面加上'<>'表明这个函数是个函数模板   ?????
    25     friend ostream & operator<< <>(ostream& os,SeqStack<T> &S);       //这里还是要加上<>,才能编译通过
    26 private:
    27     T *element;
    28     int top;
    29     int maxSize;
    30     void overflowProcess();
    31 };
    32 
    33 
    34 
    35 #endif
    View Code

    函数实现:

     1 #include <iostream>
     2 #include <fstream>
     3 #include <assert.h>
     4 #include "Stack.h"
     5 using namespace std;
     6 
     7 template <class T>
     8 SeqStack<T>::SeqStack(int sz)
     9 {
    10     maxSize=sz;
    11     top=-1;
    12     element=new T[maxSize];
    13     assert(element!=NULL);
    14 }
    15 
    16 template <class T>
    17 void SeqStack<T>::overflowProcess()
    18 {
    19     T *newarray=new T[maxSize+stackIncreament];
    20     if (newarray=NULL)
    21     {
    22         cout<<"存储分配错误"<<endl;
    23         exit(1);
    24     }
    25     for(int i=0;i<=top;i++)
    26     {
    27         newarray[i]=element[i];
    28     }
    29     maxSize=maxSize+stackIncreament;
    30     delete[] element;
    31     element=newarray;
    32 }
    33 
    34 template <class T>
    35 void SeqStack<T>::Push(const T &x)
    36 {
    37     if (isFull()==true)
    38     {
    39         overflowProcess();
    40     }
    41     element[++top]=x;
    42 }
    43 
    44 template <class T>
    45 void SeqStack<T>::Pop(const T &x)
    46 {
    47     if(isEmpty()==true)
    48     {
    49         return false;
    50     }
    51     x=element[top--];                //先退栈,然后top-1
    52     return true;
    53 }
    54 
    55 template <class T>
    56 bool SeqStack<T>::getTop(T &x)
    57 {
    58     if (isEmpty()==true)
    59     {
    60         return false;
    61     }
    62     x=element[top];
    63     return true;
    64 }
    65 
    66 template <class T>
    67 bool SeqStack<T>::isEmpty()const
    68 {
    69     if (top==-1)
    70     {
    71         return true;
    72     }
    73     else
    74         return false;
    75 }
    76 
    77 template <class T>
    78 bool SeqStack<T>::isFull()const
    79 {
    80     if (top==maxSize-1)
    81     {
    82         return true;
    83     }
    84     else 
    85         return false;
    86 }
    87 
    88 
    89 template <class T>
    90 ostream &operator<<(ostream &os,SeqStack<T> &s)
    91 {
    92     cout<<"top="<<s.top<<endl;
    93     for(int i=0;i<=s.top;i++)
    94     {
    95         cout<<i<<"   :      "<<s.element[i]<<endl;
    96     }
    97     return os;
    98 }
    View Code

    测试:

     1 #include "Stack.cpp"
     2 #include <iostream>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     SeqStack<int> a(10);
     8     a.Push(3);
     9     a.Push(4);
    10     a.Push(5);
    11 
    12     bool i=a.isEmpty();
    13     if(i)
    14         cout<<"Y";
    15     else
    16         cout<<"N";
    17     cout<<endl;
    18 
    19     cout<<a;
    20     return 0;
    21 }
    View Code

    这个是用数组实现栈,并没有很用心的全部测试到,原因在于这个写的并不是很有用,在链式栈中我会更全面的测试函数的。

  • 相关阅读:
    【华为云技术分享】浅谈服务化和微服务化(上)
    STM32 GPIO的原理、特性、选型和配置
    【华为云技术分享】如何设计高质量软件-领域驱动设计DDD(Domain-Driven Design)学习心得
    【华为云技术分享】如何做一个优秀软件-可扩展的架构,良好的编码,可信的过程
    【华为云技术分享】华为云MySQL新增MDL锁视图特性,快速定位元数据锁问题
    如何使网站支持https
    如何说孩子才会听,怎么听孩子才肯说
    box-sizing布局学习笔记
    vertical-align属性笔记
    Github上整理的日常发现的好资源【转】
  • 原文地址:https://www.cnblogs.com/ruirui610/p/3399350.html
Copyright © 2020-2023  润新知