Queue.h
#pragma once
#define MAX_LENGTH 100
using namespace std;
//环形数组队列
class Circular_Queue
{
public:
int head, tail;
int arr[MAX_LENGTH];
void InitQueue();
bool En(int & data);
bool De(int & data);
bool isEmpty();
bool isFull();
bool GetHead(int & data);
bool GetTail(int & data);
int Mod(int x, int y);
};
Queue.cpp
#include "stdafx.h"
#include "Queue.h"
#include "iostream"
using namespace std;
void Circular_Queue::InitQueue()
{
head = 0;
tail = 0;
}
bool Circular_Queue::En(int & data)
{
if (isFull())return false;
arr[head] = data;
head = Mod(head + 1, MAX_LENGTH);
return true;
}
bool Circular_Queue::De(int & data)
{
if (isEmpty())return false;
data = arr[tail];
tail = Mod(tail + 1, MAX_LENGTH);
return true;
}
bool Circular_Queue::GetHead(int & data)
{
if (isEmpty())return false;
data = arr[Mod(head - 1, MAX_LENGTH)];
return true;
}
bool Circular_Queue::GetTail(int & data)
{
if (isEmpty())return false;
data = arr[tail];
return true;
}
bool Circular_Queue::isEmpty()
{
if (head == tail)return true;
return false;
}
bool Circular_Queue::isFull()
{
if (Mod(head + 1, MAX_LENGTH) == tail)return true;
return false;
}
int Circular_Queue::Mod(int x, int y)
{
if (x < 0)
{
return x % y + y;
}
else
{
return x % y;
}
}