#include<stdio.h>
#define MaxSize 100
#define ElementType int
#define ERROR 0
struct QNode
{
ElementType Data[MaxSize];
int rear;
int front;
};
typedef struct QNode* Queue;
//队列顺序存储
//入队(循环队列、环形队列)
//(5+1)对6求余=0 5%6=5
void AddQ(Queue PtrQ, ElementType item)
{
if ((PtrQ->rear + 1) % MaxSize == PtrQ->front)
{
printf("队列满");
return;
}
PtrQ->rear = (PtrQ->rear + 1) & MaxSize;
PtrQ->Data[PtrQ->rear] = item;
}
//出队列
ElementType DeleteQ(Queue PtrQ)
{
if (PtrQ->front == PtrQ->rear)
{
printf("队列为空");
return ERROR;
}
PtrQ->front = (PtrQ->front + 1) % MaxSize;
return PtrQ->Data[PtrQ->front];
}
//链式存储
struct Node {
ElementType Data;
struct Node* Next;
};//节点
struct QNode {
struct Node* rear;//指向队尾结点
struct Node* front;//指向队头节点
};
typedef struct QNode* Queue;
Queue PtrQ;
//不带头节点的链式对列出对操作的一个示例
ElementType Delete(Queue PtrQ)
{
struct Node* FrontCell;
ElementType FrontElem;
if (PtrQ->front == NULL)
{
printf("队列空");
return ERROR;
}
FrontCell = PtrQ->front;
if (PtrQ->front == PtrQ->rear)
PtrQ->front = PtrQ->rear = NULL;
else
PtrQ->front = PtrQ->front->Next;
FrontElem = FrontCell->Data;
free(FrontCell);
return FrontElem;
}