通用队列的实现

1.顺序队列的实现

#include <cstdlib>
#include <iostream>

using namespace std;
template <class Type>
class Queue
{
  private:
  Type *q;
  int front,rear,max;
  public:
  Queue(int m):max(m)
  {
    q=new Type(max);
    rear=front=0;
  }
  ~Queue()
  {
    delete[] q;
  }
  bool Add(Type item);
  bool Del(Type &item);
  bool QueueEmpty();
  bool QueueFull();
};
template <class Type>
bool Queue<Type>::QueueEmpty()
{
  if(front==rear)
    return true;
  else
    return false;
}
template <class Type>
bool Queue<Type>::QueueFull()
{
  if((rear+1)%max==front)
    return true;
  else
    return false;
}
template <class Type>
bool Queue<Type>::Add(Type item)
{
  if(QueueFull())
  {
    cout<<"Queue if full"<<endl;
    return false;
  }
  else
  {
    q[rear]=item;
    rear=(rear+1)%max;
    return true;
  }
}
template <class Type>
bool Queue<Type>::Del(Type &item)
{
  if(QueueEmpty())
  {
    cout<<"Queue is empty!"<<endl;
    return false;
  }
  else
  {
    item=q[front];
    front=(front+1)%max;
    return true;
  }
}
int main(int argc, char *argv[])
{
    Queue<int> *q=new Queue<int>(10);
    q->Add(4);
    q->Add(5);
    int i=0;
    q->Del(i);
    cout<<i<<endl;
    q->Del(i);
    cout<<i<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

2.链式队列的实现

#include <cstdlib>
#include <iostream>

using namespace std;
template <class Type>
class LinkedQueue
{
  private:
  struct node
  {
    Type data;
    struct node *link;
  };
  struct node *top,*rear;
  public:
  LinkedQueue()
  {
    rear=top=NULL;
  }
  ~LinkedQueue()
  {
    node *temp;
    while(top)
    {
      temp=top;
      top=top->link;
      delete temp;
    }
  }
  bool Add(Type item);
  bool Del(Type &item);
  bool QueueEmpty();
};
template <class Type>
bool LinkedQueue<Type>::QueueEmpty()
{
  if(top==NULL)
    return true;
  else
    return false;
}
template <class Type>
bool LinkedQueue<Type>::Add(Type item)
{
  node *t=new node;
  if(t==NULL)
  {
    cout<<"out of space!"<<endl;
    return false;
  }
  else
  {
    t->data=item;
    t->link=NULL;
    if(rear==NULL)
    {
      top=t;
      rear=t;
    }
    else
    {
      rear->link=t;
      rear=t;
    }
    return true;
  }
}
template <class Type>
bool LinkedQueue<Type>::Del(Type &item)
{
  if(QueueEmpty())
  {
    cout<<"Queue is empty!"<<endl;
    return false;
  }
  else
  {
    node *t;
    t=top;
    item=t->data;
    if(top==rear)
    {
      top=NULL;
      rear=NULL;  
    }
    else
    {
      top=top->link;
    }
    delete t;
    return true;
  }
}
int main(int argc, char *argv[])
{
    LinkedQueue<int> *q=new LinkedQueue<int>();
    q->Add(4);
    q->Add(5);
    int i=0;
    q->Del(i);
    cout<<i<<endl;
    q->Del(i);
    cout<<i<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值