队列的抽象数据类型
ADT Queue
{
数据对象:
D={ai | 1<=i<=n , n>=0 , ai为ElemType类型}
数据关系:
R={<ai,ai+1> | ai,ai+1 属于 D,i=1,...,n-1}
基本运算:
InitQueue(&q):初始化队列
DestroyQueue(&q):销毁队列
QueueEmpty(q):判断是否为空
enQueue(&q,e):进队列
deQueue(&q,&e):出队列
}
顺序存储
数据声明
typedef struct{
ElemType data[MaxSize];
int front,rear;
}SqQueue;
初始化队列
void InitQueue(SqQueue *&q)
{
q=(SqQueue*)malloc(sizeof(SqQueue));
q->front=q->rear=-1;
}
销毁队列
void DestroyQueue(SqQueue *&q)
{
free(q);
}
判断是否为空
bool QueueEmpty(SqQueue *q)
{
return (q->front == q->rear);
}
进队列
bool enQueue(SqQueue *&q,ElemType e)
{
if(q->rear==MaxSize-1)
return false;
q->rear++;
q->data[q->rear]=e;
//q->data[++q->rear]=e;
return true;
}
出队列
bool deQueue(SqQueue *&q,ElemType &e)
{
if(q->front == q->rear)
return false;
q->front++;
e=q->data[q->front];
return true;
}
环形队列 -- front与rear指针
初始化队列
void InitQueue(SqQueue *&q)
{
q=(SqQueue*)malloc(sizeof(SqQueue));
q->front=q->rear=0;
}
销毁队列
void DestroyQueue(SqQueue *&q)
{
free(q);
}
判断是否为空
bool QueueEmpty(SqQueue *q)
{
return (q->front == q->rear);
}
进队列
bool enQueue(SqQueue *&q,ElemType e)
{
if((q->rear+1)%MaxSize == q->front)
return false;
q->rear = (q->rear+1)%MaxSize;
q->data[q->rear]=e;
return true;
}
出队列
bool deQueue(SqQueue *&q,ElemType &e)
{
if(q->front == q->rear)
return false;
q->front = (q->front+1)%MaxSize;
e=q->data[q->front];
return true;
}
环形队列 -- front与count指针
数据声明
typedef struct{
ElemType data[MaxSize];
int front,count;
}QuType;
初始化队列
void InitQueue(SqQueue *&q)
{
q=(SqQueue*)malloc(sizeof(SqQueue));
q->front=q->count=0;
}
销毁队列
void DestroyQueue(SqQueue *&q)
{
free(q);
}
判断是否为空
bool QueueEmpty(SqQueue *q)
{
return (q->count == 0);
}
进队列
bool enQueue(SqQueue *&q,ElemType e)
{
int rear;
if((q->count) == MaxSize)
return false;
rear = (q->front + q->count) % MaxSize;
rear = (rear + 1) %MaxSize;
q->data[rear]=e;
q->count++;
return true;
}
出队列
bool deQueue(SqQueue *&q,ElemType &e)
{
if(q->count == 0)
return false;
q->front = (q->front+1)%MaxSize;
e=q->data[q->front];
q->count--;
return true;
}