简单的stack实现.
简单的stack实现.
SHIHUAMarryMe 发表于2年前
简单的stack实现.
  • 发表于 2年前
  • 阅读 24
  • 收藏 0
  • 点赞 2
  • 评论 0

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

摘要: 懒得测试了....
 #include <iostream>
#include <stdexpect>
#include <memory>
template<typename T>
class Node{
 public:
  T data; //节点内存储的数据. 
  Node<T>* next; //指向下一个节点. 
  
  template<typename Ty>
  Node(const Ty& data_, Node<T>* n=nullptr);
  
  ~Node()=default;
};
template<typename T>
template<typename Ty>
Node<T>::Node(const Ty& data_, Node<T>* n)
        :data(data_)
         next(n)
{
 //
}
template<typename T>
class AStack{ //先进后出. 
 private:
  unsigned int maxSize; //该stack最多能够容纳多少个数据. 
  Node<T>* top;         //指向顶部数据的指针. 
  Node<T>* rear;        //指向尾部数据的指针. 
  unsigned int counter; //计数,当前stack中有多少个元素. 
  
  void clear(Node<T>* root)noexcept; //清理该stack中的数据. 
  
  public:
   template<typename Ty, typename = std::enable_if< std::is_unsigned<Ty>::value>::type>
   AStack(const Ty& size);
   
   ~AStack();
   
   template<typename Ty>
   void push(const Ty& value);
   const Node<T>& top()const noexcept;
   void pop()noexcept;
   void clear()noexcept;
};
template<typename T>
template<typename Ty, typename>
AStack<T>::AStack(const Ty& size)
          :maxSize(size), //size 
           top(nullptr),  //默认为空。 
           rear(nullptr),
           counter(0)
{
 //
}
template<typename T>
AStack<T>::~AStack()
{
 this->clear();
}
template<typename T>
void AStack<T>::clear(Node<T>* ptr)noexcept
{
 if(ptr == nullptr){
  return;
 }
 
 if(ptr != nullptr){
  this->clear(ptr->next);
 }
 
 delete ptr;
 ptr = nullptr;
}
template<typename T>
const Node<T>& AStack<T>::top()const noexcept //返回当前stack中的第一个数据. 
{
 return (this->rear)->data;
}
template<typename T>
void AStack<T>::pop()noexcept //删除当前stack中第一个数据. 
{
 Node<T>* headNext = (this->head)->next;
 delete this->head;
 this->head = headNext;
 headNext = nullptr;
}
template<typename T>
void AStack<T>::push(const Ty& value) //压入一条数据进去stack. 
{
 if(this->head == nullptr){
  ++(this->counter);          //this->counter = 1;
  this->head = new Node<Ty>(value);
  this->rear = (this->head)->next;
  
 }else{
  if(this->counter <= this->maxSize)
  {
   this->rear = new Node<Ty>(value);
   this->rear = (this->rear)->next;
  }else{
   throw std::runtime_error("Can not bigger than the maxSize!");
  }
 }
}
template<typename T>
void AStack<T>::clear()noexcept
{
 this->clear(this->head);
}

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 12
博文 165
码字总数 138350
×
SHIHUAMarryMe
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: