定义
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,QueuePtr;
typedef struct{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
初始化
带头结点
Status InitQueue(LinkQueue &Q){
//构造一个空队列
Q.front=Q.rear = new QNode; //生成新结点作为头结点,队头和队尾指向此结点
Q.front->next=NULL; //头结点的指针域置空
return OK;
}
int IsEmpty(LinkQueue Q){
if(Q.front == .rear){
return 1;
} else {
return 0;
}
}
不带头结点
Status InitQueue(LinkQueue &Q){
//初始时,front和rear都都指向NULL
Q.front=NULL;
Q.rear=NULL;
return OK;
}
int IsEmpty(LinkQueue Q){
IF(Q.front=NULL){
return 1;
} else {
return 0;
}
}
入队
带头结点
Status EnQueue(LinkQueue &Q,QElemType e){
QNode p;
p = new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p; //将新结点插入到队尾
Q.rear=p;
return OK;
}
不带头结点
Status EnQueue(LinkQueue &Q,QElemType e){
QNode p;
p = new QNode;
p->data=e;
p->next=NULL;
if(Q.front=NULL){
Q.front=p; //在空队列中插入第一个元素
Q.rear=p; //修改队头队尾指针
} else {
Q.rear->next=p; //新结点插入到rear结点之后
Q.rear=p;
}
return OK;
}
出队
带头结点
Status DeQueue(LinkQueue &Q,QElemType &e){
if(Q.front==Q.rear) return ERROR;
QNode p;
p = new QNode;
p=Q.front->next;
e=p->data;
Q.front->next = p->next;
if(Q.rear==p){ //最后一个元素被删,队尾指针指向头结点
Q.rear=Q.front;
}
delete p;
return OK;
}
不带头结点
Status DeQueue(LinkQueue &Q,QElemType &e){
if(Q.front==NULL) return ERROR;
QNode p;
p = new QNode;
e=p->data;
Q.front=p->next; //第一个结点直接指向p的下一个结点
if(Q.rear==p){ //如果是最后一个元素
Q.front = NULL;
Q.rear = NULL;
}
delete p;
return OK;
}
取队头元素(不带头结点)
SElemType GetHead(LinkQueue Q){
if(Q.front!=Q.rear){
return Q.fornt->next->data;
}
}