zoukankan      html  css  js  c++  java
  • 第三十四课 栈的概念及实现(上)

     

     

    这种使用原生数组作为存储容器的栈也简称顺序栈。

    添加Stack.h文件:

     1 #ifndef STACK_H
     2 #define STACK_H
     3 
     4 #include "Object.h"
     5 
     6 namespace DTLib
     7 {
     8 
     9 template < typename T >
    10 class Stack : public Object
    11 {
    12 public:
    13     virtual void push(const T& e) = 0;
    14     virtual void pop() = 0;
    15     virtual T top() const = 0;
    16     virtual void clear() = 0;
    17     virtual int size() const = 0;
    18 };
    19 
    20 }
    21 
    22 #endif // STACK_H

    添加StaticStack.h文件:

     1 #ifndef STATICSTACK_H
     2 #define STATICSTACK_H
     3 
     4 #include "Stack.h"
     5 #include "Exception.h"
     6 
     7 namespace DTLib
     8 {
     9 
    10 template < typename T, int N >
    11 class StaticStack : public Stack<T>
    12 {
    13 protected:
    14     T m_space[N];
    15     int m_top;
    16     int m_size;
    17 public:
    18     StaticStack()
    19     {
    20         m_top = -1;
    21         m_size = 0;
    22     }
    23 
    24     int capacity() const
    25     {
    26         return N;
    27     }
    28 
    29     void push(const T& e)
    30     {
    31         if( m_size < N )
    32         {
    33             m_space[m_top + 1] = e;  //先赋值,保证异常安全
    34             m_top++;
    35             m_size++;
    36         }
    37         else
    38         {
    39             THROW_EXCEPTION(InvalidOperationException, "No space in current stack ...");
    40         }
    41     }
    42 
    43     void pop()
    44     {
    45         if( m_size > 0 )
    46         {
    47             m_top--;
    48             m_size--;
    49         }
    50         else
    51         {
    52             THROW_EXCEPTION(InvalidOperationException, "No element in current stack ...");
    53         }
    54     }
    55 
    56     T top() const
    57     {
    58         if( m_size > 0 )
    59         {
    60             return m_space[m_top];
    61         }
    62         else
    63         {
    64             THROW_EXCEPTION(InvalidOperationException, "No element in current stack ...");
    65         }
    66     }
    67 
    68     void clear()
    69     {
    70         m_top = -1;
    71         m_size = 0;
    72     }
    73 
    74     int size() const
    75     {
    76         return m_size;
    77     }
    78 };
    79 
    80 }
    81 
    82 #endif // STATICSTACK_H

    测试程序如下:

     1 #include <iostream>
     2 #include "StaticStack.h"
     3 
     4 using namespace std;
     5 using namespace DTLib;
     6 
     7 
     8 int main()
     9 {
    10     StaticStack<int, 5> stack;
    11 
    12     for(int i = 0; i < 5; i++)
    13     {
    14         stack.push(i);
    15     }
    16 
    17     while( stack.size() > 0 )
    18     {
    19         cout << stack.top() << endl;
    20         stack.pop();
    21     }
    22 
    23     return 0;
    24 }

    运行结果如下:

    小结:

  • 相关阅读:
    自定义Maven Archetype模板
    [Discuz!NT] Crash问题记录
    echarts渐变色实现方法
    关于windows7 IIS 7.5和Vista IIS 7.0 局域网无法访问的解决方法
    返回接口信息
    [转]简易下拉框式日期选择器(带闰平年判断)
    漂亮的验证码
    EXT.NET 使用 Ueditor编辑器,并在后台获取的方法
    WIN7 IIS不能显示特殊图片 “+”,""号的图片需要转义才可以显示
    人才网查找职位的复杂SQL用法
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9657059.html
Copyright © 2011-2022 走看看