zoukankan      html  css  js  c++  java
  • C++实现stack【栈】

    要求:

    //****file: stack.h
    /*
    对stack进行初始化
    检查stack为空,或已满
    将整数压入到stack中
    从stack里弹出整数
    不移除任何袁术,讲过stack的内容输出到标准输出
    Stack类的私有成员如下:
    一个用于打印错误信息的私有哦成员函数
    三个私有数据成员构成了stack类的private实现,此实现为类接口提供支持。

    */

    类的实现

     1 #include <iostream>
     2 using namespace std;
     3 
     4 
     5 class Stack{
     6     public : 
     7     enum {MaxStack = 5};
     8     //初始化栈,栈为空 
     9     void init () {top = -1;}
    10     
    11     void push (int n){
    12         if (isFull()){
    13             errMsg("Full stack .cant push");
    14             return ;        
    15         }
    16         arr[++top ] =n;        
    17     }
    18     
    19     int pop() {
    20         if (isEmpty () ){
    21             errMsg("Empty stack . Popping dummy value.");
    22             return dummy_val;
    23         }
    24     
    25         return arr[top-- ];
    26     }
    27     //检查statck是否为空 
    28     bool isEmpty() {return top <0 ;}
    29     //检查stack是否已满 
    30     bool isFull() {return top >= MaxStack - 1;}
    31     
    32     //dump倾倒 , 按照从stack顶端到底端的次序,依次将Stack的内容输出到标准输出 
    33     void dump () {
    34         for (int i = top; i >= 0; i--)
    35             cout << 't' << arr[i] << '
    ';
    36     }
    37      
    38 
    39     private :
    40         void errMsg(const char * msg) const {
    41             cerr << "
    *** Stack operation failure : "<< msg << '
    '; 
    42         }
    43         
    44         int top;
    45         int arr[ MaxStack ];
    46         int dummy_val;
    47 
    48 };

    测试代码如下:

    #include <iostream>
    #include "stack.h" 
    
    int main() {
        Stack s1;
        s1.init();
        s1.push(9);
        s1.push(4);
        s1.dump();
        cout << "Popping " << s1.pop() << '
    ';
        s1.dump();
        s1.push(8);
        s1.dump();
        s1.pop();s1.pop();
        s1.dump();
        s1.pop();
        s1.dump();
        s1.push(3);
        s1.push(5);
        s1.dump();
        
        for (unsigned i = 0; i <Stack::MaxStack; i++)
        s1.push(1);
        s1.dump();
        
        return 0;
    }

    调试结果:

    /*
    t4
    t9
    Popping 4
    t9
    t8
    t9
    
    *** Stack operation failure : Empty stack . Popping dummy value.
    t5
    t3
    
    *** Stack operation failure : Full stack .cant push
    
    *** Stack operation failure : Full stack .cant push
    t1
    t1
    t1
    t5
    t3
    
    --------------------------------
    Process exited with return value 0
    Press any key to continue . . .
    
    */
  • 相关阅读:
    005 Stream的创建
    006 虚拟主机
    002 nginx的进程模型
    001 胡说八道
    001 nginx的简介和安装
    004 docker配置国内镜像站
    012 SSH
    发放失败,此请求可能存在风险,已被微信拦截【未解决】
    项目使用Nuget,然后SVN checkout后显示缺少引用
    使用存储过程非常慢,但是直接执行SQL很快
  • 原文地址:https://www.cnblogs.com/super90/p/4390873.html
Copyright © 2011-2022 走看看