// duilie.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include <stdlib.h>
using namespace std;
struct QueueRecord;
typedef struct QueueRecord *Queue;
int IsEmpty(Queue Q);
int IsFull(Queue Q);
Queue CreateQueue(int MaxElement);
void DisposeQueue(Queue Q);
void MakeEmpty(Queue Q);
void Enqueue(ElementType x, Queue Q);
ElementType Dequeue(Queue Q);
#define MinQueueSize (5)
typedef int ElementType;
struct QueueRecord
{
int Capacity;
int Front;
int Rear;
int Size;
ElementType *Array;
};
Queue CreateQueue(int MaxElement)
{
Queue Q;
if (MaxElement < MinQueueSize)
cout << "too small";
Q = (Queue)malloc(sizeof(QueueRecord));
if (Q == NULL)
cout << "out of space";
Q->Array= (ElementType *)malloc(sizeof(ElementType)*MaxElement);
if (Q->Array == NULL)
cout << "out of space";
Q->Capacity = MaxElement;
MakeEmpty(Q);
return Q;
}
void DisposeQueue(Queue Q)
{
if (Q != NULL)
{
free(Q->Array);
free(Q);
}
}
int IsEmpty(Queue Q)
{
return Q->Size == 0;
}
void MakeEmpty(Queue Q)
{
Q->Size = 0;
Q->Front = 1;
Q->Rear = 0;
}
static int Succ(int Value, Queue Q)
{
if (++Value == Q->Capacity)
Value = 0;
return Value;
}
void Enqueue(ElementType x, Queue Q)
{
if (IsFull(Q))
cout << "full";
else
{
Q->Size ++;
Q->Rear = Succ(Q->Rear,Q);
Q->Array[Q->Rear] = x;
}
}
int IsFull(Queue Q)
{
return (Q->Rear) - (Q->Front) == -1;
}
ElementType Dequeue(Queue Q)
{
ElementType x;
if (IsEmpty(Q))
{
cout << "Empty";
return 0;
}
else
{
x = Q->Array[Q->Front];
Q->Size--;
Q->Front = Succ(Q->Front, Q);
return x;
}
}
void print(Queue Q)
{
for (int i = 0; i <Q->Size; i++)
cout << Q->Array[i] << " ";
cout << endl;
}
int main()
{
Queue Q = CreateQueue(10);
Enqueue(10, Q);
Enqueue(5, Q);
print(Q);
ElementType e = Dequeue(Q);
print(Q);
while (1);
return 0;
}