1 数组队列
#include <iostream>
using namespace std;
const int MAX = 5;
class Queue
{
int a[MAX];
int b;// 开始位置
int n; //数量
public:
Queue():b(0),n(0){}
Queue& push(const T& d)
{
if(n==MAX) throw "队列满";
a[(b+n++)%MAX] = d;
return *this;
}
T pop()
{
if(empty()) throw "队列空";
--n;
return a[(b++)%MAX];
}
T front() const
{
return a[b%MAX];
}
T back() const
{
return a[(b+n-1)%MAX];
}
int size() const { return n; }
void clear() { b=0;n=0; }
bool empty() const { return n==0; }
bool full() const { return n==MAX; }
};
int main()
{
Queue q;
try
{
q.push(1);
q.push(2);
q.push(3);
q.push(4);
q.push(5);
q.push(6);
}
catch(const char *str)
{
cerr << "错误:" << str << endl;
}
cout << "front:" << q.front() << endl;
cout << "back:" <<q.back() << endl;
while(!q.empty())
{
cout << q.pop() << endl;
}
}
2 链表队列
#include "02list.h"
#include <iostream>
using namespace std;
typedef int T;
class Queue
{
List l;
public:
Queue& push(const T& d)
{
l.push_back(d);
return *this;
}
T pop() { T t = l.front(); l.erase(0); return t;}
T front() const { return l.front();}
T back() const { return l.back(); }
int size() const { return l.size(); }
void clear() { l.clear(); }
bool empty() const { return l.empty(); }
//bool full() const { return l.full(); }
};
int main()
{
Queue q;
q.push(1).push(2).push(5).push(6);
while(!q.empty())
{
cout << q.pop() << endl;
}
cout << boolalpha << q.empty() << endl;
}
02list.h 链接