线性表——栈的c++模板实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1.基本概念

栈中的元素遵守“先进后出”的原则(LIFO,Last In First Out)

只能在栈顶进行插入和删除操作

压栈(或推入、进栈)即push,将数据放入栈顶并将栈顶指针加一

出栈(或弹出)即pop,将数据从栈顶删除并将栈顶指针减一

栈的基本操作有:pop,push,判断空,获取栈顶元素,求栈大小

在这里插入图片描述


2.构造栈

可以使用数组构造栈,也可以使用单向链表构造,我觉得使用单向链表更加灵活方便,下面的例子我使用单向链表来构造栈。

单向链表的头插法比较适合,链表头作为栈顶:
在这里插入图片描述

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

3.c++模板实现

3.1 节点的数据结构

template<class T>
struct node
{
	T value;                //存储的值
	node<T>* next;			//下个节点
	
	node() : next(nullptr){}
	node(T t) : value(t),next(nullptr){}
};

3.2 用模板类构造一个简单的stack类

template<class T>
class myStack
{
    int cnts; //入栈数量
    node<T> *head; //栈的头部
public:

    myStack(){ cnts = 0; head = new node<T>; }
    void stackPush(T arg); //入栈
    T stackPop();  //出栈
    T stackTop(); //获取栈顶元素

    void printStack(); //打印栈
    int counts(); //获取栈内元素个数
    bool isEmpty(); //判断空
};
template<class T>
void myStack<T>::stackPush(T arg)
{
    node<T> *pnode = new node<T>(arg); //申请入栈元素的空间
    pnode->next = head->next;
    head->next = pnode;
    cnts++;
}
template<class T>
T myStack<T>::stackPop()
{
    if (head->next!=nullptr) 
    {
        node<T>* temp = head->next;
        head->next = head->next->next;
        T popVal = temp->value;
        delete temp;
        return popVal;
    }
}
template<class T>
T myStack<T>::stackTop()
{
    if (head->next!=nullptr)
    {
        return head->next->value;
    }
}
template<class T>
void myStack<T>::printStack()
{
    if (head->next != nullptr)
    {
        node<T>* temp = head;
        while (temp->next != nullptr)
        {
            temp = temp->next;
            cout << temp->value << endl;
        }
    }
}
template<class T>
int myStack<T>::counts()
{
    return cnts;
}
template<class T>
bool myStack<T>::isEmpty()
{
    if (cnts)
        return false;
    else
        return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值