顺序队列的结点结构
#define MAXQSIZE 100
typedef struct {
QElemType *base;
int front;
int rear;
}SqQueue;
初始化空队列: InitQueue(&Q)
Status InitQueue_Sq(SqQueue &Q)
{
Q.base = (ElemType*)malloc(MAXQSIZE*sizeof(ElemType));
if(!Q.base) exit(OVERFLOW);
Q.front = Q.rear =0;
return OK;
}
销毁队列: DestroyQueue(&Q)
在这里插入代码片
清空队列: ClearQueue(&Q)
在这里插入代码片
判栈队列: StackQueue(Q)
在这里插入代码片
求队列长: QueueLength(Q)
int QueueLength_Sq(SqQueue Q)
{
return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
入队: EnQueue(&Q, e)
Status EnQueue_Sq(SqQueue &Q , ElemType e)
{
if((Q.rear+1)%MAXQSIZE = = Q.front)
return ERROR;
Q.base[Q.rear] = e;
Q.rear = (Q.rear+1)%MAXQSIZE;
return OK;
}
出队: DeQueue(&Q, &e)
Status DnQueue_Sq(SqQueue &Q , ElemType &e)
{
if(Q.rear = = Q.front) return ERROR;
e = Q.base[Q.front];
Q.front = (Q.front+1)%MAXQSIZE;
return OK;
}
链式队列结构
typedef struct QNode{ ElemType data;
struct Qnode *next;
}QNode,*QueuePtr;
typdef struct{
QueuePtr front,rear;
}LinkQueue;
入队
Status EnQueue_L(SqQueue& Q,ElemType e){
p = (QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data = e; p->next = NULL;
Q.rear ->next = p; Q.rear = p;
return OK;
}
出队
Status DnQueue_L(SqQueue& Q ,ElemType &e)
{
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;
}