当前位置:   article > 正文

栈的建立【包括入栈出栈显示】(基于单链表实现)_链栈怎么显示入栈后的结果

链栈怎么显示入栈后的结果

一般来说,c++有专门的STL,可以直接调用接口。怕自己忘记,我还是po出来了



C++标准库(STL)栈(stack)、队列(queue)、双向队列(deque)、容器(vector)的基本操作_云帆之路Tony的博客-CSDN博客

上面那个博客很赞很简洁,上面这些也不用刻意记,因为用多了自然熟。。。

顺序表建栈:栈的实现(顺序表实现)_inbSorryMaker的博客-CSDN博客

现在我们看看通过单链表建立栈的操作(如有问题请指正!)

目录

建立链式栈(声明)

清空栈

入栈

出栈(删除栈顶元素)

取栈顶元素(不删除栈顶元素)

输出栈所有元素(递归)


  1. //基本栈的结构
  2. template <class E> //模板
  3. class Stack { //栈的类定义
  4. public:
  5. Stack(){ }; //构造函数
  6. virtual void Push(E x) = 0; //进栈
  7. virtual bool Pop(E& x) = 0; //出栈
  8. virtual bool getTop(E& x) = 0; //取栈顶
  9. virtual bool IsEmpty() = 0; //判栈空
  10. virtual bool IsFull() = 0; //判栈满
  11. };

建立链式栈(声明)

  1. #include <iostream.h>
  2. #include “stack.h”
  3. template <class E>
  4. struct StackNode { //栈结点类定义
  5. E data; //栈结点数据
  6. StackNode<E> *link; //结点链指针
  7. };
  8. template <class E>
  9. class LinkedStack : public Stack<E> { //链式栈类定义
  10. private:
  11. StackNode<E> *top; //栈顶指针
  12. void output(ostream& os,StackNode <E> *ptr, int& i);
  13. //递归输出栈的所有元素
  14. public:
  15. LinkedStack() : top(NULL) {} //构造函数
  16. ~LinkedStack() { makeEmpty(); } //析构函数
  17. void Push(E x); //进栈
  18. bool Pop(E& x); //退栈
  19. bool getTop(E& x) const; //取栈顶
  20. bool IsEmpty() const { return top == NULL; }
  21. void makeEmpty(); //清空栈的内容
  22. int k = 1;
  23. void output(ostream& os, StackNode<E> *ptr, int& i);
  24. friend ostream& operator << (ostream& os,LinkedStack<E>& s)
  25. { output(os, s.top, k); } //输出栈元素的重载操作 <<
  26. };

清空栈

  1. template <class E>
  2. LinkedStack<E>::makeEmpty() {
  3. //逐次删去链式栈中的元素直至栈顶指针为空。
  4. StackNode<E> *p;
  5. while (top != NULL) //逐个结点释放
  6. { p = top; top = top->link; delete p; }
  7. };

入栈

  1. template <class E>
  2. void LinkedStack<E>::Push(E x) {
  3. //将元素值x插入到链式栈的栈顶,即链头。
  4. StackNode<E> *next;
  5. next = new StackNode; //创建新结点
  6. next->data=x;
  7. top=next;
  8. assert (top != NULL); //创建失败退出
  9. };

出栈(删除栈顶元素)

  1. template <class E>
  2. bool LinkedStack<E>::Pop(E& x) {
  3. //删除栈顶结点, 返回被删栈顶元素的值。
  4. if (IsEmpty() == true) return false; //栈空返回
  5. StackNode<E> *p = top; //暂存栈顶元素
  6. top = top->link; //退栈顶指针
  7. x = p->data; delete p; //释放结点
  8. return true;
  9. };

取栈顶元素(不删除栈顶元素)

  1. template <class E>
  2. bool LinkedStack<E>::getTop(E& x) const {
  3. if (IsEmpty() == true) return false; //栈空返回
  4. x = top->data; //返回栈顶元素的值
  5. return true;
  6. };

输出栈所有元素(递归)

  1. template <class E>
  2. void LinkedStack<E>::output(ostream& os, StackNode<E> *ptr, int& i) {
  3. //递归输出栈中所有元素(沿链逆向输出)
  4. if (ptr != NULL) {
  5. if (ptr->link != NULL)
  6. output(os, ptr->link, i++);//递归
  7. os << i << “ : ” << p->data << endl;
  8. //逐个输出栈中元素的值
  9. }
  10. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/611890
推荐阅读