• 数据结构-链式栈c++


    栈的最基本特点先进后出,本文简单介绍一下用c++写的链式栈

    头文件

     1 #ifndef LINKEDSTACK_H
     2 #define LINKEDSTACK_H
     3 
     4 template<class T> class LinkedStack;
     5 
     6 template<class T>
     7 class ChainNode
     8 {
     9     friend class LinkedStack<T>;
    10 private:
    11     ChainNode(const T& theData, ChainNode *n=0)
    12         :data(theData), link(n){}//创建新的结点,"link(n)"表示指向已经入栈的结点
    13     T data;
    14     ChainNode<T> *link;
    15 };
    16 
    17 template<class T>
    18 class LinkedStack
    19 {
    20 public:
    21     LinkedStack():top(0){} //初始化栈,顶结点指针指向空
    22     ~LinkedStack() { MakeEmpty(); } //析构函数,清空栈
    23     bool IsEmpty() const;//判断栈是否为空
    24     T& Top() const;//返回栈顶结点数据域
    25     void Push(const T& e);//从栈顶放入结点
    26     void Pop();//从栈顶删除结点
    27     void MakeEmpty();//不断从栈顶删除结点直到栈为空
    28 private:
    29     ChainNode<T> *top;
    30 };
    31 
    32 template<class T>
    33 bool LinkedStack<T>::IsEmpty() const
    34 {
    35     return top == 0;
    36 }
    37 
    38 template<class T>
    39 void LinkedStack<T>::Push(const T &e)
    40 {
    41     top = new ChainNode<T>(e, top);//“12行”刚入栈的新节点变为顶结点并指向已经入栈的结点
    42 }
    43 
    44 template<class T>
    45 T& LinkedStack<T>::Top() const
    46 {
    47     if (this->IsEmpty())
    48         throw"Stack is empty.";
    49     return top->data;
    50 }
    51 
    52 template<class T>
    53 void LinkedStack<T>::Pop()
    54 {
    55     if (this->IsEmpty())
    56         throw"Stack is empty. Cannot delete.";
    57     ChainNode<T> *delNode = top;//用指针保存要删除的栈顶结点,以备删除该节点
    58     top = top->link;
    59     delete delNode;//通过指针找到即将被删除的顶结点同时删除
    60 }
    61 
    62 template<class T>
    63 void LinkedStack<T>::MakeEmpty()
    64 {
    65     while (!IsEmpty())
    66         Pop();
    67 }
    68 #endif

    源文件,测试用

     1 #include<iostream>
     2 #include"linkedstack.h"
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     cout << "测试链式栈" << endl;
     9 
    10     LinkedStack<int> stack1;
    11     stack1.Push(5);
    12     cout << stack1.Top() << endl;
    13     stack1.Push(15);
    14     cout << stack1.Top() << endl;
    15     stack1.Push(25);
    16     cout << stack1.Top() << endl;
    17     stack1.Pop();
    18     cout << stack1.Top() << endl;
    19 
    20     return 0;
    21 }
  • 相关阅读:
    【贪心】POJ1017:Packets
    【贪心】POJ2393:Yogurt factory
    【贪心】POJ3190:Stall Reservations
    【递归】地盘划分
    【递归与递推】青蛙过河
    【搜索】POJ1242:Rescue
    单词方阵(dfs)
    反向因子Inverse Factorial
    P1604 B进制星球
    抵制克苏恩(记忆化搜索)
  • 原文地址:https://www.cnblogs.com/yang901112/p/11815044.html
Copyright © 2020-2023  润新知