#include <bits/stdc++.h>
using namespace std;
template<typename Type>
class SeqQueue {
public:
SeqQueue(int sz) : rear(0), front(0), _count(0), maxSize(sz) {
data = new Type[sz];
if (data == NULL) {
cout << "Error: 初始化失败!" << endl;
exit(1);
}
}
~SeqQueue() {
delete[] data;
}
void MakeEmpty();
bool IsEmpty();
bool IsFull();
bool Append(const Type item);
Type Delete();
Type Get();
void Print();
private:
int rear;
int front;
int _count;
int maxSize;
Type *data;
};
template<typename Type>
void SeqQueue<Type>::MakeEmpty() {
this->_count = 0;
this->front = 0;
this->rear = 0;
}
template<typename Type>
bool SeqQueue<Type>::IsEmpty() {
return _count == 0;
}
template<typename Type>
bool SeqQueue<Type>::IsFull() {
return _count == maxSize;
}
template<typename Type>
bool SeqQueue<Type>::Append(const Type item) {
if (IsFull()) {
cout << "Error: 队列满" << endl;
return 0;
}
data[rear] = item;
rear = (rear + 1) % maxSize;
_count++;
return 1;
}
template<typename Type>
Type SeqQueue<Type>::Delete() {
if (IsEmpty()) {
cout << "Error: 队列空" << endl;
exit(1);
}
Type temp = data[front];
front = (front + 1) % maxSize;
_count--;
return temp;
}
template<typename Type>
Type SeqQueue<Type>::Get() {
if (IsEmpty()) {
cout << "Error: 队列空" << endl;
exit(1);
}
return data[front];
}
template<typename Type>
void SeqQueue<Type>::Print() {
cout << "front";
for (int i = 0; i < _count; i++) {
cout << "--->" << data[(front + i + maxSize) % maxSize];
}
cout << "--->rear" << endl << endl << endl;
}
int main() {
SeqQueue<int> queue(10);
int init[10] = {1, 6, 9, 0, 2, 5, 8, 3, 7, 4};
for (int i = 0; i < 5; i++) {
queue.Append(init[i]);
}
queue.Print();
cout << queue.Delete() << endl;
queue.Print();
for (int i = 5; i < 10; i++) {
queue.Append(init[i]);
}
queue.Print();
cout << queue.Get() << endl;
queue.MakeEmpty();
queue.Print();
queue.Append(1);
queue.Print();
return 0;
}