您的位置:首页 > 理论基础 > 数据结构算法

数据结构之队列_Queue

2015-11-23 19:51 597 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: