链表栈(LinkedListStack)

  链式栈:就是一种操作受限的单向链表,每次入栈一个元素,向链表中添加一个节点,出栈一个元素,释放一个节点。因为栈具有“后进先出”的特点,如果每次在链表的尾部进行插入和删除,就要遍历整个链表来找到尾节点。而在头部进行插入和删除时,只需根据头指针即可找到链表的首元素结点。而无需遍历链表。所以链式栈的出,入栈通过对链表进行头删和头插来实现。

有关链表的知识先阅读这篇文章:LinkedList

代码清单

LinkedListStack.h

#ifndef C___LINKEDLISTSTACK_H
#define C___LINKEDLISTSTACK_H
#include "LinkedList.h"
template<typename T>
class Stack {
public:
    virtual int getSize()const = 0;
    virtual bool isEmpty()const = 0;
    virtual void push(T& e) = 0;
    virtual T pop() = 0;
    virtual T peek()const = 0;
};

template<typename T>
class LinkedListStack : public Stack<T> {
public:
    LinkedListStack();
    int getSize()const;
    bool isEmpty()const;
    void push(T&e);
    T pop();
    T peek()const;
    void print()const;
private:
    LinkedList<T>*list;
};

template<typename T>
int LinkedListStack<T>::getSize() const {
    return list->getSize();
}

template<typename T>
bool LinkedListStack<T>::isEmpty() const {
    return list->isEmpty();
}

template<typename T>
void LinkedListStack<T>::push(T& e) {
    list->addFirst(e);
}

template<typename T>
T LinkedListStack<T>::pop() {
    return list->removeFirst();
}

template<typename T>
T LinkedListStack<T>::peek()const {
    return list->getFirst();
}

template<typename T>
void LinkedListStack<T>::print() const {
    std::cout << "Stack: size = " << list->getSize() << std::endl;
    std::cout << "bottom ";
    list->print();
    std::cout << " top" << std::endl;
}

template<typename T>
LinkedListStack<T>::LinkedListStack() {
    list = new LinkedList<T>();
}

#endif //C___LINKEDLISTSTACK_H

main.cpp

int LinkedListStack()
{
   LinkedListStack<int>*ls = new LinkedListStack<int>();
   for(int i = 0;i<10;++i)
   {
       ls->push(i);
       ls->print();
   }
   cout<<"isEmpty()"<<ls->isEmpty()<<endl;
   cout<<"getSize()"<<ls->getSize()<<endl;
   cout<<"peek"<<ls->peek()<<endl;
   cout<<"pop"<<ls->pop()<<endl;
   ls->print();
   return 0;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃米饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值