#ifndef _QUEUE_H_
#define _QUEUE_H_
//链表实现
namespace queue_in_list
{
template<typename T>
class Queue
{
private:
struct Node
{
T data;
struct Node *next;
};
Node *front, *rear;
public:
void MakeNull();
bool Empty()const;
void EnQueue(T x);
void DeQueue();
T Front()const;
};
template<typename T>
T Queue<T>::Front()const
{
if (Empty())
{
cout << "EMPTY!\n";
return;
}
else
return front->next->data;
}
template<typename T>
void Queue<T>::DeQueue()
{
if (Empty())
{
cout << "EMPTY!\n";
return;
}
Node *p = front->next;
front->next = p->next;
if (p->next == NULL)
rear = front;
delete p;
}
template<typename T>
void Queue<T>::EnQueue(T x)
{
Node *p = new Node;
p->data = x;
p->next = NULL;
rear->next = p;
rear = p;
}
template<typename T>
bool Queue<T>::Empty()const
{
return front == rear;
}
template<typename T>
void Queue<T>::MakeNull()
{
front = new Node;
front->next = NULL;
rear = front;
}
}
//数组实现--循环队列
namespace queue_in_array
{
template<typename T>
class Queue
{
private:
enum { MAX = 100 };
T data[MAX];
int front;
int rear;
public:
void MakeNull();
bool Empty()const;
bool Full()const;
T Front()const;
void EnQueue(T x);
void DeQueue();
};
template<typename T>
void Queue<T>::DeQueue()
{
if (Empty())
{
cout << "EMPTY!\n";
return;
}
else
front = (front + 1) % MAX;
}
template<typename T>
void Queue<T>::EnQueue(T x)
{
if (Full())
{
cout << "FULL!\n";
return;
}
else
{
rear = (rear + 1) % MAX;
data[rear] = x;
}
}
template<typename T>
bool Queue<T>::Full()const
{
return (rear + 1) % MAX == front;
}
template<typename T>
T Queue<T>::Front()const
{
if (Empty())
{
cout << "EMPTY!\n";
return NULL;
}
else
{
int t = (front + 1) % MAX;
return data[t];
}
}
template <typename T>
bool Queue<T>::Empty()const
{
return front == rear;
}
template<typename T>
void Queue<T>::MakeNull()
{
front = rear = MAX - 1;
}
}
#endif
Queue--C++模板类
最新推荐文章于 2021-11-16 23:22:47 发布