一,队列的相关概念
1,队列的定义
2,队列的应用
二,顺序队列实现
#include<iostream>
using namespace std;
#define MaxSize 100
template<typename T>
class Queue
{
private:
int front; //队头
int rear; //队尾
T *list;
public:
Queue();
void Append(T i);
void Serve();
int GetLength();
int Clear();
int IsEmpty();
int IsFull();
T GetFront();
~Queue();
};
template<typename T>
Queue<T>::Queue() //队列初始化
{
list = new T[MaxSize];
front = 0;
rear = 0;
}
template<typename T>
void Queue<T>::Append(T i) //入队列
{
if(!IsFull())
{
list[rear] = i;
rear++;
}
else
{
cout << "队列已满";
}
}
template<typename T>
int Queue<T>::GetLength() //获得队列中的元素个数
{
return rear-front;
}
template<typename T>
int Queue<T>::Clear() //清空队列
{
rear = front = 0;
}
template<typename T>
void Queue<T>::Serve() //出队列
{
if(!IsEmpty())
{
front++;
}
else
{
cout << "队列空";
}
}
template<typename T>
int Queue<T>::IsEmpty() //判断队列是否为空
{
return rear == front;
}
template<typename T>
int Queue<T>::IsFull() //判断队列是否已满
{
return rear == MaxSize;
}
template<typename T>
T Queue<T>::GetFront() //获得队头元素
{
if(!IsEmpty())
{
return list[front];
}
}
template<typename T>
Queue<T>::~Queue() //销毁队列
{
delete []list;
}
int main()
{
Queue<int> aa;
for(int i=1; i<6; i++)
{
aa.Append(i);
}
aa.Serve();
aa.Serve();
for(int i=6; i<9; i++)
{
aa.Append(i);
}
aa.Serve();
cout << aa.GetFront();
cout << aa.GetLength();
}
三,链队列实现
#include<iostream>
using namespace std;
template<typename T>
struct node //队列存储的数据类型
{
T data;
node<T>* next;
};
template<typename T>
class Queue
{
private:
int count; //队列中元素的个数
node<T>* front; //队头指针
node<T>* rear; //队尾指针
public:
Queue();
~Queue();
bool IsEmpty();
int GetFront(T& x);
int Append(const T x);
int Serve();
int GetLength();
};
template<typename T>
Queue<T>::Queue() //队列初始化
{
count = 0;
front = new node<T>();
front->next = NULL;
rear = front;
}
template<typename T>
Queue<T>::~Queue() //销毁队列
{
while(!IsEmpty())
{
Serve();
}
}
template<typename T>
bool Queue<T>::IsEmpty() //判断队列是否为空
{
return count == 0;
}
template<typename T>
int Queue<T>::GetFront(T& x) //获得队首元素
{
x = front->next->data;
return 1;
}
template<typename T>
int Queue<T>::Append(const T x) //入队
{
node<T>* s = new node<T>();
s->data = x;
s->next = NULL;
rear->next = s;
rear = s;
count++;
return 1;
}
template<typename T>
int Queue<T>::Serve() //出队
{
if(IsEmpty())
{
return 0;
}
node<T>* t = front->next;
front->next = t->next;
delete t;
count--;
if(front->next==NULL)
{
rear = front;
}
return 1;
}
template<typename T>
int Queue<T>::GetLength() //获得队列中元素个数
{
return count;
}
int main()
{
}