zoukankan      html  css  js  c++  java
  • LinkStack

      1 //Node.h
      2 template<typename ElemType>
      3 struct Node
      4 {
      5     ElemType data;
      6     Node<ElemType> *next;
      7     Node();
      8     Node(ElemType item,Node<ElemType> * link=NULL);
      9 };
     10 template<typename ElemType>
     11 Node<ElemType>::Node()
     12 {
     13     next=NULL;
     14 }
     15 template<typename ElemType>
     16 Node<ElemType>::Node(ElemType item,Node<ElemType> *link)
     17 {
     18     data=item;
     19     next=link;
     20 }
     21 //LinkStack.h
     22 template<typename ElemType>
     23 class LinkStack
     24 {
     25 protected:
     26     Node<ElemType> *top;
     27     int count;
     28 public:
     29     LinkStack();
     30     virtual ~LinkStack();
     31     int Length() const;
     32     bool Empty() const;
     33     void Clear();
     34     void Traverse(void (*visit)(const ElemType &)) const;
     35     bool Push(const ElemType &e);
     36     bool Top(ElemType &e) const;
     37     bool Pop(ElemType &e);
     38     LinkStack(const LinkStack<ElemType> &copy);
     39     LinkStack<ElemType> &operator=(const LinkStack<ElemType> &copy);
     40 };
     41 template<typename ElemType>
     42 LinkStack<ElemType>::LinkStack()
     43 {
     44     top=NULL;
     45     count=0;
     46 }
     47 template<typename ElemType>
     48 LinkStack<ElemType>::~LinkStack()
     49 {
     50     Clear();
     51 }
     52 template<typename ElemType>
     53 int LinkStack<ElemType>::Length() const
     54 {
     55     return count;
     56 }
     57 template<typename ElemType>
     58 bool LinkStack<ElemType>::Empty() const
     59 {
     60     return top==NULL;
     61 }
     62 template<typename ElemType>
     63 void LinkStack<ElemType>::Clear()
     64 {
     65     ElemType tmpElem;
     66     while(!Empty())
     67         Pop(tmpElem);
     68 }
     69 template<typename ElemType>
     70 void LinkStack<ElemType>::Traverse(void (*visit)(const ElemType &))const
     71 {
     72     Node<ElemType> *tmpPtr;
     73     LinkStack<ElemType> tmpS;
     74     for(tmpPtr=top;tmpPtr!=NULL;tmpPtr=tmpPtr->next)
     75         tmpS.Push(tmpPtr->data);
     76     for(tmpPtr=tmpS.top;tmpPtr!=NULL;tmpPtr=tmpPtr->next)
     77         (*visit)(tmpPtr->data);
     78 }
     79 template<typename ElemType>
     80 bool LinkStack<ElemType>::Push(const ElemType &e)
     81 {
     82     Node<ElemType> *newTop=new Node<ElemType>(e,top);
     83     if(newTop==NULL)//内存耗尽
     84         return false;
     85     else
     86     {
     87         top=newTop;
     88         count++;
     89         return true;
     90     }
     91 
     92 }
     93 template<typename ElemType>
     94 bool LinkStack<ElemType>::Top(ElemType &e)const
     95 {
     96     if(Empty())
     97         return false;
     98     else
     99     {
    100         e=top->data;
    101         return true;
    102     }
    103 
    104 }
    105 template<typename ElemType>
    106 bool LinkStack<ElemType>::Pop(ElemType &e)
    107 {
    108     if(Empty())
    109         return false;
    110     else
    111     {
    112         Node<ElemType> *old_top=top;
    113         top=old_top->next;
    114         e=old_top->data;
    115         count--;
    116         delete old_top;
    117         return true;
    118     }
    119 
    120 }
    121 template<typename ElemType>
    122 LinkStack<ElemType>::LinkStack(const LinkStack<ElemType> &copy)
    123 {
    124     if(Empty())
    125     {
    126         top=NULL;
    127         count=0;
    128     }
    129     else
    130     {
    131         top=new Node<ElemType>(copy.top->data);
    132         count=copy.count;
    133         node<ElemType> *buttomPtr=top;
    134         for(Node<ElemType> *tmpPtr=copy.top->next;tmPtr!=NULL;tmpPtr=tmpPtr->next)
    135         {
    136             buttomPtr->next=new Node<ElemType> (tmpPtr->data);
    137             buttomPtr=buttomPtr->next;
    138         }
    139 
    140     }
    141 }
    142 template<typename ElemType>
    143 LinkStack<ElemType> &LinkStack<ElemType>::operator=(const LinkStack<ElemType> &copy)
    144 {
    145     if(&copy!=this)
    146     {
    147         if(copy.Empty())
    148         {
    149             top=NULL;
    150             count=0;
    151         }
    152         else
    153         {
    154             Clear();
    155             top=new Node<ElemType>(copy.top->data);
    156             count=copy.count;
    157             Node<ElemType> *buttomTop=top;
    158             for(Node<ElemType> *tmpPtr=copy.top->next;tmpPtr!=NULL;tmpPtr=tmpPtr->next)
    159             {
    160                 buttomTop->next=new node<ElemType>(tmpPtr->data);
    161                 buttomTop=buttomTop->next;
    162             }
    163 
    164         }
    165     }
    166 
    167 }
  • 相关阅读:
    6. svg学习笔记-路径
    5. svg学习笔记-坐标系变换
    4. svg学习笔记-文档结构元素和样式的使用
    2. svg学习笔记-svg中的坐标系统和viewbox
    3. svg学习笔记-基本形状和画笔属性
    多项式:从门都没入到刚迈过门槛
    排列组合与二项式基础
    单调队列入门
    多项式:从什么都不知道到门都没入
    动态规划之四边形不等式优化
  • 原文地址:https://www.cnblogs.com/ljwTiey/p/4268115.html
Copyright © 2011-2022 走看看