一、定义
只允许在一端进行插入操作,而在另一端进行删除的线性表
(头尾相接的顺序存储结构成为循环队列)
二、循环队列的顺序存储结构
typedef struct
{
qelemtype data[maxsize];
int front;
int rear;
}sqqueue;
队列的顺序基本操作:
**(1)**入队操作
status enqueue(sqqueue *q,qelemtype e)
{
if((q->rear+1)%maxsize==q->front)
return error;
q->data[q->rear]=e;
q->rear=(q->rear+1)%maxsize;
return ok;
}
**(1)**出队操作
status dequeue(sqqueue *q,qelemtype *e)
{
if(q->front==q->rear)
return error;
*e=q->data[q->front];
q->front=(q->front+1)%maxsize;
return ok;
}
三、队列链式存储结构
(其实就是链式的单链表)
int qelemtype;
struct qnode
{
qelemtype data;
struct qnode *next;
}qnode,*queueptr;
struct
{
queueptr front,rear;
}linkqueue;
队列的顺序基本操作:
**(1)**入队操作
status enqueue(linkqueue *q,qelemtype e)
{
queueptr s=(queueptr)malloc(sizeof(qnode));
if(!s)//存储分配失败
exit(overflow);
s->data=e;
s->next=null;
q->rear->next=s;
q->rear=s;
return ok;
}
**(2)**出队操作
status dequeue(linkqueue *q,qelemtype *e)
{
queueptr p;
if(q->front==q->rear)
return error;
p=q->front->next;
*e=p->data;
q->front->next=p->next;
if(q->rear==p)//如果队头就是队尾
{
q->rear=q->front
}
free(p);
return ok;
}