zoukankan      html  css  js  c++  java
  • c语言和c++栈的简单实现以及构造器的原理

    也就是训练将原来的c语言 用类表示出来。。

    关于构造器:

      //1与类名相同 没有返回值 被系统生成对象时自动调用,用于初始化
      //2 可以有参数 构造器重载 默认参数
      //3 重载和默认不能同时存在,系统默认生成一个无参的构造器,如果提供了,那么系统不在提供

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 typedef struct Stack
     6 {
     7     char space[1024];
     8     int top;
     9 }Stack;
    10 void init(Stack *s)
    11 {
    12     s->top = 0;
    13     memset(s->space,0,1024);
    14 }
    15 int isEmpty(Stack *s)
    16 {
    17     return s->top == 0;
    18 }
    19 int isFull(Stack *s)
    20 {
    21     return s->top == 1024;
    22 }
    23 
    24 char pop(Stack *s)
    25 {
    26     return s->space[--(s->top)];
    27 }
    28 char push(Stack *s,char c)
    29 {
    30     return s->space[s->top++] = c;
    31 }
    32 int main()
    33 {
    34     
    35     Stack st;
    36     init(&st);
    37     if(!isFull(&st))
    38     {
    39         push(&st,'g');
    40     }
    41     if(!isFull(&st))
    42     {
    43         push(&st,'t');
    44     }
    45     if(!isFull(&st))
    46     {
    47         push(&st,'n');
    48     }
    49     if(!isFull(&st))
    50     {
    51         push(&st,'h');
    52     }
    53     if(!isFull(&st))
    54     {
    55         push(&st,'r');
    56     }
    57     while(!isEmpty(&st))
    58     {
    59         cout<<pop(&st)<<endl;
    60     }
    61     return 1;
    62 }

    c++的实现

     1 //stack.cpp
     2 
     3 
     4 #include <iostream>
     5 #include "stack.h"
     6 using namespace std;
     7 
     8 bool Stack:: isEmpty()
     9 {
    10     return top == 0;
    11 }
    12 bool Stack:: isFull()
    13 {
    14     return top == _size;
    15 }
    16 
    17 char Stack:: pop()
    18 {
    19     return space[--(top)];
    20 }
    21 char Stack:: push(char c)
    22 {
    23     return space[top++] = c;
    24 }
    //stack.h
    
    
    #include <iostream>
    
    using namespace std;
    //2017/1/14
    //construtot 构造器
    //1与类名相同 没有返回值 被系统生成对象时自动调用,用于初始化
    //2 可以有参数 构造器重载 默认参数
    //3 重载和默认不能同时存在
    
    //destructor 析构器
    //~与类型相同 无参无返回 用于对象销毁时的内存处理工作
    //
    class Stack
    {
    public:
        Stack()//这里通过其中一个注释和同时注释可以得到一个结论:
            //系统默认生成一个无参的构造器,如果提供了,那么系统不在提供
    
        {
    
            //init();
            //cout<<"stack()"<<endl;
                top = 0;
                space = new char[1000];
            
        }
        Stack(int size)//重载
        {
            top = 0;
            space = new char[size];
            _size = size;
        }
        ~Stack()
        {
            cout<<"析构"<<endl;
        }
        //void init();
        bool isEmpty();
        bool isFull();
        char pop();
        char push(char c);
    private:
        
        char *space;
        int top;
        int _size;
    };
     1 //main.cpp
     2 
     3 
     4 
     5 #include <iostream>
     6 #include "stack.h"
     7 using namespace std;
     8 int main()
     9 {
    10     Stack *ps = new Stack;//无参构造 标配
    11     Stack *ps2 = new Stack(100);
    12     delete ps;
    13     delete ps2;//此时需要手动
    14     //Stack st;//此时调用无参构造
    15     //为什么不是stack st() 只是因为有一个
    16     //冲突和函数void function();
    17     Stack st(100);//调用有参构造
    18     //st.init();
    19     for(char y='a';!st.isFull()&&y!='z';y++)
    20     {
    21         st.push(y);
    22     }
    23     while(!st.isEmpty())
    24     {
    25         cout<<st.pop()<<endl;
    26     }
    27     return 1;
    28 }
  • 相关阅读:
    mysql简单介绍及安装
    LVS
    LAMP架构
    记录一个低级又让人踩坑的bug(org.springframework.web.method.annotation.MethodArgumentTypeMismatchException)
    Hadoop通过idea连接远程集群出现的用户权限问题
    linxu离线环境安装docker
    linux中oracle的使用问题简单罗列与解决
    Linux下安装Oracle详细版-附oracle11g软件包
    Host is not allowed to connect to this MySQL server问题解决
    kettle的安装使用及介绍
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/6286424.html
Copyright © 2011-2022 走看看