C++ 顺序栈和链式栈的实现

stack.h

#ifndef _STACK_H
#define _STACK_H

#include <vector>

typedef int DataType;

class Node
{
private:
    DataType data;
public:
    Node *next;
    Node(DataType val);
    ~Node();
    DataType get_data();
};

//链式栈
class Stack
{
private:
    Node *headNode;
public:
    Stack();
    ~Stack();
    int pop();//出栈
    void push(DataType val);//入栈
    int size();//返回栈的元素数目
    int is_empty();//栈为空时返回真
    DataType top();//返回栈顶元素
};

//顺序栈
class StackOrder
{
private:
    int MAX_SIZE;
    std::vector<DataType> s;
    int _top;//标记栈顶元素
public:
    StackOrder();
    ~StackOrder();
    int pop();//出栈
    int push(DataType val);//入栈
    int is_empty();//栈为空时返回真
    DataType top();//返回栈顶元素
};
#endif

stack.cpp

#include "stack.h"

Node::Node(DataType val)
{
    data = val;
    next = 0;
}

Node::~Node()
{}

DataType Node::get_data()
{
    return data;
}

Stack::Stack()
{
    headNode = 0;
}

Stack::~Stack()
{}

int Stack::pop()
{
    Node *p = headNode;
    if(is_empty())//栈为空时
        return -1;//出错处理
    headNode = headNode->next;
    delete p;
    return 0;
}

void Stack::push(DataType val)
{
    Node *node = new Node(val);
    node->next = headNode;
    headNode = node;
}

int Stack::size()
{
    Node *p = headNode;
    int i = 0;
    while(p)
    {
        i++;
        p = p->next;
    }
    return i;
}

int Stack::is_empty()
{
    if(!headNode)//栈为空
        return 1;
    return 0;
}

DataType Stack::top()
{
    if(is_empty())
        return -1;
    return headNode->get_data();
}

StackOrder::StackOrder()
{
    MAX_SIZE = 20;
    _top = -1;
}

StackOrder::~StackOrder()
{}

int StackOrder::pop()
{   
    if(_top < 0)//栈空
        return -1;
    s[_top] = 0;
    _top--;
    return 0;
}

int StackOrder::push(DataType val)
{
    _top++;
    if(_top >= MAX_SIZE)//栈满
        return -1;
    s.push_back(val);
    return 0;
}

int StackOrder::is_empty()
{
    if(-1 == _top)
        return 1;
    return 0;
}

DataType StackOrder::top()
{
    if(is_empty())
        return -1;
    return s[_top];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值