C++ 栈

顺序栈

#include <iostream>

using namespace std;
#define MaxSize 100
//顺序栈
//动态分配栈
template<typename ElemType>
struct SqStack {
    ElemType* base;  //栈底指针
    ElemType* top;   //栈顶指针
};
//静态分配栈
/*
typedef struct SqStack{
    ElemType data[100];  //栈底指针
    int *top;   //栈顶指针
}SqStack;
*/

/**
 * @brief creatStack 创建栈
 * @param size
 * @return
 */
template<typename ElemType> bool initSqStack(SqStack<ElemType>& sq)
{
    sq.base = new ElemType[MaxSize];
    if (!sq.base)
    {
        return false;
    }
    sq.top = sq.base;
    return true;
}
/**
 * @brief pushStack 入栈
 * @param sq
 * @param data
 * @return
 */
template<typename ElemType> bool pushSqStack(SqStack<ElemType>& sq, ElemType data)
{
    /*判断栈是否存满*/
    if (sq.top - sq.base >= MaxSize)
        return false;
    *(sq.top)++ = data;
    return true;

}
/**
 * @brief popStack 出栈
 * @param sq
 * @param data
 * @return
 */
template<typename ElemType> bool popSqStack(SqStack<ElemType>& sq, ElemType& data)
{
    /*判断栈是否为空*/
    if (sq.top == sq.base)
        return false;
    data = *(--sq.top);
    return true;
}

链栈


//链栈
template<typename ElemType>
struct LinkNode {
    ElemType data;  //数据
    struct LinkNode* next;   //指向前一个数据的指针
};

/**
 * @brief creatLinkStack 创建链栈
 * @param size
 * @return
 */
template<typename ElemType> LinkNode<ElemType>* initLinkStack()
{
    LinkNode<ElemType>* s = new LinkNode<ElemType>;
    if (!s)
        return NULL;
    s->next = NULL;
    return s;
}
/**
 * @brief pushLinkStack 入栈
 * @param sq
 * @param data
 * @return
 */
template<typename ElemType> bool pushLinkStack(LinkNode<ElemType>** s, ElemType data)
{
    LinkNode<ElemType>* tmp = new LinkNode<ElemType>;
    if (!tmp)
    {
        return false;
    }
    tmp->next = *s;
    *s = tmp;
    (*s)->data = data;
    return true;

}
/**
 * @brief popLinkStack 出栈
 * @param sq
 * @param data
 * @return
 */
template<typename ElemType> bool popLinkStack(LinkNode<ElemType>** s, ElemType& data)
{
    /*判断栈是否为空*/
    if (!(*s)->next)
        return false;
    data = (*s)->data;
    LinkNode<ElemType>* tmp = (*s)->next;
    delete (*s);
    *s = tmp;
    return true;
}

测试


int main()
{
    SqStack<int> sq;
    LinkNode<int>* s = initLinkStack<int>();
    int data;
    initSqStack(sq);
    for (int i = 0; i < 10; i++)
        pushSqStack(sq, i);
    cout << "顺序栈:" << endl;
    while (popSqStack(sq, data))
        cout << "data = " << data << endl;


    for (int i = 0; i < 10; i++)
        pushLinkStack(&s, i);
    cout << "链栈:" << endl;
    while (popLinkStack(&s, data))
        cout << "data = " << data << endl;

    getchar();
    return 0;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值