#ifndef QUEUE_H_INCLUDED
#define 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;
}
void Queue<T>::Pop()
{
if (Empty())
{
std::cout << "队列已空";
return;
}
size--;//肯定存在此节点
Node<T>* p = front;
front = front->next;
delete p;
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;
}
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;
}
Node<T>* q = front;
if (p == q)
{
front = p->next;
delete p;
return;
}
while (q->next != p)
q = q->next;
q = q->next;
q->next = p->next;
delete p;
delete p;
}
template <class T>
void Queue<T>::Clear()
{
Node<T>* p = front;
while (p != NULL)
{
front = p->next;
delete p;
p=front;
void Queue<T>::Clear()
{
Node<T>* p = front;
while (p != NULL)
{
front = p->next;
delete p;
p=front;
}
front = rear = NULL;
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
void Queue<T>::Show()
{
Node<T>* p = head;
while (p != NULL)
{
std::cout << p->data << " ";
p = p->next;
}
}
#endif