首页 > 编程语言 > 详细

数据结构 - 链栈的实现 C++

时间:2019-09-29 22:17:15      阅读:93      评论:0      收藏:0      [点我收藏+]

链栈封装 C++

使用C++对链栈进行了简单的封装,实现了栈的基本操作
封装方法: pop(),top(),size(),empty(),push()

代码已经过测试

#pragma once
#include <iostream>
#include <algorithm>
using namespace std;

template<class T>class LinkNode{
public: 
    T data;
    LinkNode *pnext;
    LinkNode *ppre;
};
template<class T>class Stack {
public:
         Stack();       //构造函数
    void pop();         //弹出头元素
    void push(T value); //入栈
    bool empty();       //判断是否为空栈
    int  size();        //返回栈的大小
      T  top();         //获取首元素
private:
    LinkNode<T> *head;
    LinkNode<T> *tail;
    int len;
};

template<class T>
inline Stack<T>::Stack()
{
    this->head = nullptr;
    this->tail = nullptr;
    this->len = 0;
}

template<class T>
inline void Stack<T>::pop()
{
    if (this->head == this->tail)
    {
        this->head = this->tail = nullptr;
        this->len  = 0;
        return;
    }
    LinkNode<T> *p = this->tail;
    this->tail = p->ppre;
    this->tail->pnext = nullptr;
    free(p);
    p = nullptr;
    this->len--;
}

template<class T>
inline void Stack<T>::push(T value)
{
    LinkNode<T> *newnode = new LinkNode<T>;
    newnode->data = value;
    if (this->len == 0)
    {
        this->head = newnode;
        this->tail = newnode;
        this->len++;
    }
    else {
        tail->pnext = newnode;
        newnode->ppre = tail;
        this->tail = newnode;
        this->len++;
    }
}

template<class T>
inline bool Stack<T>::empty()
{
    if (this->len == 0)
    return true;
    else return false;
}

template<class T>
inline int Stack<T>::size()
{
    return this->len;
}

template<class T>
inline T Stack<T>::top()
{
    return T(this->tail->data);
}

如果大家有什么疑问的话可以加qq向我提出哦,欢迎各位大佬指出问题。
如果你觉得对你有所帮助的话就给我点个赞,点燃我下次写文章的动力吧 ^_^ !

数据结构 - 链栈的实现 C++

原文:https://www.cnblogs.com/wlw-x/p/11609681.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!