队列的链式实现

typedef struct LinkNode{ //链式队列结点 
    int data;
    struct LinkNode *next;
}LinkNode;
typedef struct{  //链式队列 
    LinkNode *front,*rear; //队列头指针和尾指针 
    
}LinkQueue;
void InitQueue(LinkQueue &Q){
    //初始时,rear front都指向头结点 
    Q.rear=Q.front=(LinkNode*)malloc(sizeof(LinkNode));
    Q.front->next=NULL;
    //不带头结点时
    Q.rear=NULL;
    Q.front=NULL; 
}
//入队
void EnQueue(LinkQueue &Q,int x){
    LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));
    s->data=x;
    s->next=NULL;
    //带头结点 
    Q.rear->next=s;
    Q.rear=s;
    //不带头结点
    if(Q.front==NULL){
        Q.front=s;
        Q.rear=s;
    } 
    else{
        Q.rear->next=s;
        Q.rear=s;
    }
} 
//出队(带头结点)
bool DeQueue(LinkQueue &Q,int &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;
} 
//出队(不带头结点)
bool DeQueue(LinkQueue &Q,int &x){
    if(Q.front==NULL) return false;
    LinkNode *p=Q.front;
    x=p->next;
    if(Q.front==p){
       Q.front=NULL;
       Q.rear=NULL;
    }
    free(p);
    return true; 
}

 

上一篇:数据结构-文件处理


下一篇:单链表全部实现