数据结构之队列_Queue

来源:互联网 发布:微店怎么导入淘宝商品 编辑:程序博客网 时间:2024/05/21 20:27
#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED

#include<iostream>

template <class T>
struct Node
{
 T data;
 Node<T>* next;
 Node(const T& item, Node<T>* nxt = NULL) :data(item), next(nxt){}
};


template <class T>
class Queue
{
private:
 Node<T>* front;
 Node<T>* rear;
 int size;
public:
 Queue<T>() : size(0), front(NULL), rear(NULL){}
 ~Queue<T>();
 T Front();
 void Pop();
 void Clear();
 void Delete(const T& item);
 void Insert(const T& item);
 Node<T>* Search(const T& item);
 bool Empty(){ return front == NULL; }
 int GetSize()const{ return size; }
 void Show();
};
template <class T>
Queue<T>::~Queue()
{
 Node<T>* p = front;
 while (p != NULL)
 {
  front = p->next;
  delete p;
  p=front;

 }
}


template <class T>
void Queue<T>::Insert(const T& item)
{
 if (front == NULL)
 {
  front = rear = new Node<T>(item);
 }
 else
 {
  rear->next = new Node<T>(item);
  rear = rear->next;
 }
 size++;
}

template <class T>
void Queue<T>::Pop()
{
 if (Empty())
 {
  std::cout << "队列已空";
  return;
 }

 size--;//肯定存在此节点
 Node<T>* p = front;
 front = front->next;
 delete p;


}

template <class T>
T Queue<T>::Front()
{
 return front->data;
}
template <class T>
Node<T>* Queue<T>::Search(const T& item)
{
 Node<T>* p = front;
 while (p != NULL)
 {
  if (p->data = item)
   return p;
  p = p->next;
 }
 return NULL;
}


template <class T>
void Queue<T>::Delete(const T& item)
{
 Node<T>* p = Search(item);
 if (p == NULL)
 {
  std::cout << "无此节点";
  return;
 }

 size--;//肯定存在此节点
 Node<T>* q = front;
 if (p == q)
 {
  front = p->next;
  delete p;
  return;
 }

 while (q->next != p)
  q = q->next;

 q->next = p->next;
 delete p;

}

template <class T>
void Queue<T>::Clear()
{
 Node<T>* p = front;
 while (p != NULL)
 {
  front = p->next;
  delete p;
  p=front;

 }
 front = rear = NULL;

}

template <class T>
void Queue<T>::Show()
{
 Node<T>* p = head;
 while (p != NULL)
 {
  std::cout << p->data << " ";
  p = p->next;
 }
}
#endif
1 0
原创粉丝点击