实现顺序栈

栈作为一种数据结构,它按照后进先出的原则存储数据,只能在栈顶进行插入和删除操作的特殊线性表。

按照存储方式不同,栈可以分为顺序栈和链式栈。

实现顺序栈需要注意:
(1)采用顺序存储方式;
(2)需要预分配空间,data[maxlen];
(3)合理分配内存空间是个比较麻烦的事情。如果每个栈分配空间多,则会造成存储空间浪费;如果分配空间少,则会出现“溢出”。(这个问题可以通过链式栈来解决)

以下为具体实现代码,在vs2010上测试通过:

#include <iostream>
using namespace std;
#define  maxlen 30

class myStack
{
public:
    myStack();

    bool empty();
    bool full();
    bool getTopElement(int &x);
    bool push(int x);
    bool pop();
    int size();

private:
    int count;
    int data[maxlen];
};

int _tmain(int argc, _TCHAR* argv[])
{
    myStack sta;
    bool flag = sta.empty();//判断栈是否为空
    if(flag)
    {
        for(int i = 0; i < 5; i++)
        sta.push(i);//入栈
    }

    int x;
    sta.getTopElement(x);//x = 4, 访问栈顶元素

    sta.pop();//栈顶元素出栈

    sta.getTopElement(x);//x = 3, 访问栈顶元素

    return 0;
}

myStack::myStack()//初始化
{
    count = 0;
}

bool myStack::empty()
{
    if(count == 0)
        return true;
    else
        return false;
}

bool myStack::full()
{
    if(count == maxlen)
        return true;
    else
        return false;
}

//当栈中有一个元素时,count = 1, 存放在data[0]
bool myStack::getTopElement(int &x)
{
    if(empty()) 
        return false;
    else
    {
        x = data[count - 1];//访问栈顶元素与元素出栈要区分
        return true;
    }
}

bool myStack::push(int x)
{
     if(full())
         return OVERFLOW;
     else
     {
         data[count++] = x;//同时执行了count = count + 1;
         return true;
     }
}

bool myStack::pop()
{
    if(empty())
        return UNDERFLOW;
    else
    {
        count--;
        return true;
    }
}

int myStack::size()
{
    return count;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值