您的位置:首页 > 其它

队列的顺序存储表示---数组实现

2015-07-03 13:17 549 查看
#define MaxSize 10
typedef struct Node{
ElementType *Array;
int front;
int rear;
} *Queue;

Queue
CreateQueue( int MaxSize )
{
Queue PtrQ;
PtrQ = malloc(sizeof(struct Node ));
if(PtrQ == NULL)
printf("out of space ");
PtrQ->Array = malloc(sizeof( ElementType ) * MaxSize );
if(PtrQ == NULL )
printf("out of space ");
PtrQ->front = 0;
PtrQ->rear = 0;
return PtrQ;
}
int
IsFull( Queue PtrQ )
{
return (rear+1) % MaxSize == front;
}

void
AddQ(ElementType X, Queue PtrQ)
{
if( IsFull( PtrQ ) )
{
printf("队列满");
return;
}
PtrQ->rear = (Q->rear + 1) % MaxSize;
PtrQ->Array[PtrQ->rear] = X;
}
int
IsEmpty(Queue PtrQ )
{
return PtrQ->rear == PtrQ->front;
}
ElementType
DeleteQ( Queue PtrQ )
{
if( IsEmpty( PtrQ ) )
{
printf("队列空");
return;
}
PtrQ->front = (PtrQ->front + 1) % MaxSize;
return PtrQ->Array[PtrQ->front];
}


View Code
以上为循环数组存储,且没有把size域放在结构里,这种方式,一个结构就是一个队列

判断队列满空,还可以用结构中加size域和tag(记录最后一次是插入还是删除)

MaxSize的数组只用MaxSize-1的空间

rear指向队列的最后一个元素

front指向队列的第一个元素的前面

front = rear 为空

front = (rear+1) % MaxSize 为满
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: