之前收藏了一个动态循环队列的代码,不太好用,改了改,留着备用

#ifndef _QUEUE_H_
#define _QUEUE_H_

#include <iostream>
#include <stdexcept> 
#include <string> 
using namespace std; 
namespace my_space 

    template<class ElemType> 
    class queue 
    { 
    public: 
        queue();               //初始化队列 
        ~queue();              //销毁队列 
  int create_queue(int isize);//创建队列
        bool empty() const;    //判断队列是否为空 
        int length() const;    //返回队列的长度 
        ElemType gethead() throw(out_of_range); //返回队列的队首元素 
        void push_back(const ElemType &e);                 //插入元素到队尾 
        ElemType *pop_front() throw(out_of_range);    //删除队头元素 
    private: 
        class qnode 
        { 
        public: 
            ElemType data; 
            qnode *next; 
        }; 
        qnode *front; 
        qnode* rear; 
        int size;
  int queuelen;
    }; 
    template<class ElemType> 
    queue<ElemType>::queue() : size(0) ,queuelen(0)
    { 
        front = rear = new qnode; 
        //front -> next = NULL; 
  front -> next = rear; 
    } 
    template<class ElemType> 
    queue<ElemType>::~queue() 
    { 
#if 0
        while(front) 
        { 
            rear = front -> next; 
            delete front; 
            front = rear; 
        } 
#else
  while (queuelen >= 0)
  {
   qnode *node = front->next;
   delete front;
   front = node;
   --queuelen;
  }
#endif
 } 
 template<class ElemType> 
 int queue<ElemType>::create_queue(int isize)
 {
  if (isize <= 0 || size > 0)
  {
   return 0;
  }
  
  qnode *tmp = front;
  int tmpsize = isize;
  
  while (tmpsize > 0)
  {
   qnode *p = new qnode;
   tmp->next = p;
   tmp = p;
   tmp->next = front;    
   tmpsize--;
   queuelen++;
  }
  
  return isize;
  
 }
    template<class ElemType> 
    bool queue<ElemType>::empty() const 
    { 
        return size == 0; 
    } 
    template<class ElemType> 
    int queue<ElemType>::length() const 
    { 
        return size; 
    } 
    template<class ElemType> 
    ElemType queue<ElemType>::gethead() throw(out_of_range) 
    { 
        if(empty()) 
            throw("queue is empty"); 
        return front->next->data; 
    } 
    template<class ElemType> 
    void queue<ElemType>::push_back(const ElemType &e) 
    { 
#if 0
        qnode *p = new qnode; 
        p->data = e; 
        p->next = NULL; 
        rear->next = p; 
        rear = p; 
        ++size; 
#else
  if (size == queuelen)
  {
   front->data = e;
   front = front->next;
   rear = rear->next;
  }
  else
  {
   rear = rear->next;
   rear->data = e;
   size++;
  }
#endif
    } 
    template<class ElemType> 
    ElemType *queue<ElemType>::pop_front() throw(out_of_range) 
    { 
        if(empty()) 
            throw("queue is empty"); 
#if 0
        qnode *p; 
        p = front->next; 
        front->next = p->next; 
        if(rear == p) 
            rear = front; 
        ElemType e = p->data; 
        delete p; 
        --size; 
        return e; 
#else
  qnode *p; 
  p = front->next; 
  front = p;
  --size;
  return (&(p->data));
#endif
    } 

#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值