最近刚刚学习了队列的使用,在这里用来两种设置队列的方法,主要是判断的条件有所区别。
在每个方法中都构造了创建,判满,加入,判空,取出,打印五种函数。
一:利用一个变量保存大小
#include<iostream>
using namespace std;
typedef struct Queue
{
int* Data;
int Front;
int Rear;
int Maxsize;
int Capacity;
};
Queue* Create(int max)
{
Queue* queue;
queue = new Queue();
queue->Maxsize = max;
queue->Data = new int[max];
if (queue->Data == NULL)
{
cout << "内存出错" << endl;
exit(-1);
}
else
{
queue->Front = 0;
queue->Rear = 0;
queue->Capacity = 0;
return queue;
}
}
bool IsFull(Queue* queue)
{
if (queue->Capacity == queue->Maxsize)
{
return true;
}
return false;
}
void Enqueue(Queue* queue, int data)
{
if (IsFull(queue))
{
cout << "队列已满" << endl;
}
else
{
if (queue->Capacity == 0)
{
queue->Data[queue->Rear] = data;
}
else
{
queue->Rear = (++queue->Rear) % (queue->Maxsize);
queue->Data[queue->Rear] = data;
}
queue->Capacity++;
}
}
bool IsEmpty(Queue* queue)
{
if (queue->Capacity == 0)
{
return true;
}
return false;
}
void Outqueue(Queue* queue,int* data)
{
if (IsEmpty(queue))
{
cout << "队列已空" << endl;
}
else
{
*data = queue->Data[queue->Front];
queue->Front = (++queue->Front) % (queue->Maxsize);
queue->Capacity--;
}
}
void PrintQueue(Queue* queue)
{
if (IsEmpty(queue))
{
cout << "队列已空" << endl;
}
else
{
cout << "the capacity of queue is " << queue->Capacity << endl;
while (1)
{
if (IsEmpty(queue))
{
break;
}
else
{
cout << queue->Data[queue->Front] << ' ';
queue->Front = (++queue->Front) % (queue->Maxsize);
queue->Capacity--;
}
}
}
}
int main()
{
int n;
cin >> n;
Queue* queue = Create(n);
while (1)
{
if (IsFull(queue))
{
break;
}
else
{
int temp;
cin >> temp;
Enqueue(queue, temp);
}
}
PrintQueue(queue);
system("pause");
return 0;
}
二、利用头和尾的位置进行判断
#include<iostream>
using namespace std;
typedef struct Queue
{
int* Data;
int Front;
int Rear;
int Maxsize;
};
Queue* Create(int max)
{
Queue* queue;
queue = new Queue();
queue->Maxsize = max;
queue->Data = new int[max];
if (queue->Data == NULL)
{
cout << "内存出错" << endl;
exit(-1);
}
else
{
queue->Front = 0;
queue->Rear = 0;
return queue;
}
}
bool IsFull(Queue* queue)
{
int temp = (queue->Rear + 1) % (queue->Maxsize);
if (temp==queue->Front)
{
return true;
}
return false;
}
void Enqueue(Queue* queue, int data)
{
if (IsFull(queue))
{
cout << "队列已满" << endl;
}
else
{
queue->Rear = (queue->Rear + 1) % (queue->Maxsize);
queue->Data[queue->Rear] = data;
}
}
bool IsEmpty(Queue* queue)
{
if (queue->Front==queue->Rear)
{
return true;
}
return false;
}
void Outqueue(Queue* queue,int* data)
{
if (IsEmpty(queue))
{
cout << "队列已空" << endl;
}
else
{
queue->Front = (++queue->Front) % (queue->Maxsize);
*data = queue->Data[queue->Front];
}
}
void PrintQueue(Queue* queue)
{
if (IsEmpty(queue))
{
cout << "队列已空" << endl;
}
else
{
int temp = ((queue->Rear) - (queue->Front) + queue->Maxsize) % (queue->Maxsize);
cout << "the capacity of queue is " << temp << endl;
while (1)
{
if (IsEmpty(queue))
{
break;
}
else
{
queue->Front = (++queue->Front) % (queue->Maxsize);
cout << queue->Data[queue->Front] << ' ';
}
}
}
}
int main()
{
int n;
cin >> n;
Queue* queue = Create(n);
while (1)
{
if (IsFull(queue))
{
break;
}
else
{
int temp;
cin >> temp;
Enqueue(queue, temp);
}
}
PrintQueue(queue);
system("pause");
return 0;
}
希望对大家有所帮助