基本操作
InitQueue(&Q) //初始化队列,构造一个空队列
QueueEmpty(Q) //判空,若空,返回true
EnQueue(&Q,x) //入队,将x加入,使之成为队尾
DeQueue(&Q,&x) //出队,删除队头,用x返回
GetHead(Q,&x) //读队头元素,用x返回
顺序队
1、结构
typedef struct{
ElemType data[MaxSize];
int front,rear;
}SqQueue;
2、操作(循环队列)
(1)初始化
void InitQueue(SqQueue &Q){
Q.rear=Q.front=0;
}
(2)判断队空
bool isEmpty(SqQueue Q){
if(Q.reaer=Q.front)
return true;
else
return false;
}
(3)入队
bool EnQueue(SqQueue &Q,ElemType x){
if((Q.rear+1)%MaxSize==Q.front) //队满报错
return false;
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize; //队尾指针加1取模
return true;
(4)出队
bool DeQueue(SqQueue &Q,ElemType &x){
if(Q.rear==Q.front) //队空,报错
return false;
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize; //队头指针加1取模
return true;
链队
1、结构
typedef struct{ //链式队列结点
ElemType data;
struct LinkNode *next
}LinkNode;
typedef struct{ //链式队列
LinkNode *front,*rear;
}LinkQueue;
2、操作
(1)初始化
void InitQueue(LinkList &Q){
Q.front=Q.reaer=(LinkNode*)malloc(sizeof(LinkNode)); //建立头结点
Q.front->next=NULL; //初始为空
(2)判队空
bool IsEmpty(LinkQueue Q){
if(Q.front==Q.rear)
return true;
else
return false;
}
(3)入队
void EnQueue(LinkList &Q,ElemType x){
LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x; //创建新结点,插入到链尾
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
(4)出队
void DeQueue(LinkList &Q,ElemType &x){
if(Q.front==Q.rear) //空队
return false;
LinkNode *p=Q.front->next;
x=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front; //若原队列只有一个结点,删除后变空
free(p);
return true;
}