一.数组实现(只用N-1个空间)
#define MaxSize 10
typedef struct
{
int Data[MaxSize];
int rear;
int front;
}Quene;
void AddQ(Quene *Ptrq,int item)
{
if((Ptrq->rear+1)%MaxSize==Ptrq->front)
{
printf("队列满");
return ;
}
Ptrq->rear=(Ptrq->rear+1)%MaxSize;
Ptrq->Data[Ptrq->rear]=item;
}
int DelectQ(Quene *Ptrq)
{
if(Ptrq->front==Ptrq->rear)
{
printf("队列空");
return ERROR;
}
else
{
Ptrq->front=(Ptrq->front+1)%MaxSize;
return Ptrq->Data[Ptrq->front];
}
}
二.链表实现
typedef struct Node
{
int Data;
struct Node *Next;
}QNode;
typedef struct
{
QNode *rear;
QNode *front;
}LinkQuene;
LinkQuene *Ptrq;
int DelectQ(LinkQuene *Ptrq)
{
QNode *FrontCell;
int 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;
}
void AddQ(LinkQuene *Ptrq,int item)
{
QNode *RearCell;
if(Ptrq->front==NULL)
{
RearCell=(struct Node *)malloc(sizeof(struct Node));
Ptrq->rear=Ptrq->front=RearCell;
RearCell->Data=item;
}
else
{
RearCell=(struct Node *)malloc(sizeof(struct Node));
RearCell->Data=item;
RearCell->Next=Ptrq->rear->Next;
Ptrq->rear->Next=RearCell;
Ptrq->rear=RearCell;
}
}