手写 栈操作

stack.h

 

#pragma once

#include <iostream>
using namespace std;

class MyStack
{
public:
    MyStack(void);    
    ~MyStack(void);

    MyStack(int size);//分配内存 初始化栈空间,设定栈最大容量,栈顶
    bool stackEmpty();//空返回true
    bool stackFull();//满返回true
    void clearStack();//清空栈
    int stackLength();//栈内已有的元素个数
    bool push(char elem);//入栈 栈顶上升
    bool pop(char& elem);//出栈 栈顶下降
    char pop();
    void stackTraverse(bool direction);//遍历栈所有元素


private:

    int m_iSize;//栈最大容量
    int m_iTop;//栈中元素的个数,  另外栈底永远不变就是0
    char* m_pBuffer;//栈空间的起始指针地址

};

 

、、、、、、、、、、、、、、、、

stack.cpp

#include "stdafx.h"
#include "MyStack.h"


MyStack::MyStack(void)
{
}


MyStack::MyStack(int size)
{
    m_pBuffer = new char[size];
    m_iSize = size;
    m_iTop = 0;
}

bool MyStack::stackEmpty()
{
    return m_iTop == 0?true:false;
}

bool MyStack::stackFull()
{
    return m_iTop == m_iSize?true:false;
}

void MyStack::clearStack()
{
    m_iTop = 0;
}

int MyStack::stackLength()
{
    return m_iTop;
}

bool MyStack::push(char elem)
{
    if (stackFull())
    {
        return false;
    }
    else
    {
        m_pBuffer[m_iTop] = elem;
        m_iTop++;

        return true;
    }
}

bool MyStack::pop(char& elem)
{
    if (stackEmpty())
    {
        return false;
    }
    else
    {
        m_iTop--;
        elem = m_pBuffer[m_iTop];

        return true;
    }
}

char MyStack::pop()
{
    if (stackEmpty())
    {
        throw 1;
    }
    else
    {
        m_iTop--;
        return m_pBuffer[m_iTop];        
    }
}

void MyStack::stackTraverse(bool direction)
{
    if (direction)
    {
        //buttom to top
        for (int i = 0 ; i < m_iTop; i++)
        {
            cout<<m_pBuffer[i]<<", ";        
        }
    }
    else
    {
        //top to buttom
        for (int i =m_iTop-1 ; i >= 0; i--)
        {
            cout<<m_pBuffer[i]<<", ";        
        }

    }

}

MyStack::~MyStack(void)
{
    delete[] m_pBuffer;
    m_pBuffer = NULL;
}
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值