/*
队列(连续存储方式实现)
2018年5月11日17点28分
*/
#include <stdio.h>
#include <malloc.h>
#define Ele int
typedef struct ArrayQueue
{
Ele *dataArr;
int front;
int rear;
int lenght;
}ArrayQueue;
ArrayQueue* NewArrayQueue(int lenght);
int Push(ArrayQueue* AQ, Ele data);
Ele Pop(ArrayQueue* AQ);
int IsFull(ArrayQueue* AQ);
int IsEmpty(ArrayQueue* AQ);
int main()
{
int i = 0;
int result;
int isEmpty;
ArrayQueue* AQ = NewArrayQueue(10);
for(i = 0; i < 20; i++)
{
result = Push(AQ, i * 2);
printf("入队数值: %d 入队状况:%d Front Rear [%d,%d] \n", i * 2, result, AQ->front, AQ->rear);
}
for(i = 0; i < 20; i++)
{
isEmpty = IsEmpty(AQ);
result = Pop(AQ);
printf("出队数值: %d 队列为空:%d Front Rear [%d,%d] \n",result, isEmpty, AQ->front, AQ->rear);
}
for(i = 0; i < 20; i++)
{
result = Push(AQ, i * 6);
printf("入队数值: %d 入队状况:%d Front Rear [%d,%d] \n", i * 2, result, AQ->front, AQ->rear);
isEmpty = IsEmpty(AQ);
result = Pop(AQ);
printf("出队数值: %d 队列为空:%d Front Rear [%d,%d] \n",result, isEmpty, AQ->front, AQ->rear);
}
for(i = 0; i < 11; i++)
{
printf("[遍历] %d\n",AQ->dataArr[i]);
}
return 0;
}
//初始化
ArrayQueue* NewArrayQueue(int lenght)
{
ArrayQueue* AQ = (ArrayQueue*)malloc(sizeof(ArrayQueue));
AQ->dataArr = (Ele*)malloc(sizeof(Ele) * (lenght + 1));
AQ->front = 0;
AQ->rear = 1;
AQ->lenght = lenght;
return AQ;
}
//入队
int Push(ArrayQueue* AQ, Ele data)
{
//1 判断队列是否满
if(IsFull(AQ))
{
return 0;
}
//2 入队
(AQ->dataArr)[AQ->rear] = data;
AQ->rear = (AQ->rear + 1) % (AQ->lenght + 1);
return 1;
}
//出队
Ele Pop(ArrayQueue* AQ)
{
int index;
Ele data;
//1 判断队列是否空
if(IsEmpty(AQ))
{
return data;
}
//2 出队
if(AQ->front == AQ->lenght)
{
AQ->front = 0;
}
else
{
AQ->front ++;
}
data = (AQ->dataArr)[AQ->front];
return data;
}
//判断队列是否满
int IsFull(ArrayQueue* AQ)
{
if(AQ->front == AQ->rear)
{
return 1;
}
return 0;
}
//判断队列是否空
int IsEmpty(ArrayQueue* AQ)
{
if(AQ->front == 0)
{
if(AQ->rear == AQ->lenght)
{
return 1;
}
}
if(AQ->rear == 0)
{
if(AQ->rear + AQ->lenght + 1 - AQ->front == 1)
{
return 1;
}
}
else
{
if(AQ->rear - AQ->front == 1)
{
return 1;
}
}
return 0;
}
队列(连续存储方式实现)
最新推荐文章于 2024-07-25 17:00:18 发布