一、顺序队列【相当于一维数组】
1.准备工作
#define MAXQSIZE 100
typedef struct{
QElemType*base;
int front;
int rear;
}SqQueue;
2.队满,队空。入队,出队
二、链式队列
1.准备工作
typedef struct Qnode{
ElemType data;
struct Qnode*next;
}Qnode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
2.队列的初始化
Status InitQUeue(LinkQueue &Q){
Q.front=Q.rear=(Qnode*)malloc(sizeof(Qnode));
if(!Q.front) exit(OVERFLOW);
Q.front->next=NULL;
return ok;
}
3.队列的销毁
Status DestroyQueue(LinkQueue &Q){
while(Q.front){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return OK;
}
4.入队列
Status EnQueue(LinkQueue &Q,ElemType e){
p=(Qnode*)malloc(sizeof(Qnode));
if(!p) exit OVERFLOW;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return ok;
}
5.出队列
Status DeQueue(LinkQueue &Q,ElemType &e){
if(Q.front=Q.rear) return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(p==Q.rear) Q.front=Q.rear;
free(p);
return ok;
}
6.取队头
Status GetHead(LinkQueue Q,ElemType &e){
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
e=p->data;
return ok;
}
三、循环队列【相当于数组】
1.准备工作
#define MAXQSIZE 100
Type struct{
QElemType *base;
int front;
int rear;
}SqQueue;
2.初始化
Status InitQueue(SqQueue &Q){
Q.base=(ElemType*)malloc(MAXQSIZE*sizeof(ELemType));
if(!Q.base) exit OVERFLOW;
Q.front=Q.rear=0;
return OK;
}
3.求队列的长度
int QueueLength(SqQueue Q){
return(Q.rear-Q.front+MAXQSIZE)%MAXSIZE;
}
4.入队列
Status EnQueue(SqQueue &Q,ElemType e){
if((Q.rear+1)%MAXSIZE==Q.front) return ERROR;
Q.base[rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
return OK;
}
5.出队列
Status DeQueue(SqQueue &Q,ElemType &e){
if(Q.rear==Q.front) return ERROR;//队空
e=Q.base[Q.front];//保存对头指针
Q.front=(Q.front+1)%MAXSIZE;
return ok;
}