C++练习:用指针实现栈

来源:互联网 发布:gps端口查看器 编辑:程序博客网 时间:2024/06/11 18:46

使用C++的指针实现一个简单版的栈

stack.h

#ifndef stack_hpp#define stack_hpp#include <stdio.h>class Stack{public:    Stack();    ~Stack();        bool Push(int value);    int Pop();    private:    unsigned int m_elem_size;    unsigned int m_logic_length;    unsigned int m_alloc_length;    int* m_elems;};#endif /* stack_hpp */

stack.cpp

#include "stack.hpp"#include <stdlib.h>#include <assert.h>Stack::Stack(){    m_elem_size = sizeof(int);    m_logic_length = 0;    m_alloc_length = 4;        m_elems = (int*)malloc(m_alloc_length * sizeof(m_elem_size));}Stack::~Stack(){    free(m_elems);}bool Stack::Push(int value){    //如果栈已满,根据翻倍策略扩大内存    if(m_logic_length == m_alloc_length)    {        m_alloc_length = m_alloc_length * 2;        m_elems = (int*)realloc(m_elems, m_alloc_length * m_elem_size);        assert(m_elems != NULL);    }        m_elems[m_logic_length] = value;    m_logic_length ++;        return true;}int Stack::Pop(){    assert(m_logic_length > 0);    m_logic_length --;    return m_elems[m_logic_length];}

main.cpp

#include "stack.hpp"#include <iostream>int main(int argc, const char * argv[]) {        Stack stack;    stack.Push(1);    stack.Push(2);    stack.Push(3);    stack.Push(4);    stack.Push(5);        int val = stack.Pop();    std::cout << "val" << val << std::endl;        return 0;}


0 0