數據結構筆記——隊列的鏈式存儲

目錄

一、隊列的鏈式實現

二、初始化(帶頭結點)

三、初始化(不帶頭結點)

四、入隊(帶頭結點)

五、入隊(不帶頭結點)

六、出隊(帶頭結點)

七、出隊(不帶頭結點)

八、隊列滿的條件

九、總結


一、隊列的鏈式實現

typedef struct LinkNode{        //鏈式隊列結點
    ElemType data;
    struct LinkNode *next;
}LinkNode;

typedef struct{        //鏈式隊列
    LinkNode *front,*rear;    //隊列的隊頭和隊尾指針
}LinkQueue;

 

二、初始化(帶頭結點)

typedef struct LinkNode{
    ElemType data;
    struct LinkNode *next;
}LinkNode;

typedef struct{
    LinkNode *front,*rear;
}LinkQueue;

//初始化(帶頭結點)
void InitQueue(LinkQueue &Q){
    Q.front = Q.rear = (LinkNode *)malloc(sizeof(LinkNode));
    Q.front->next = NULL;
}

void testLinkQueue(){
    LinkQueue Q;
    LinkQueue(Q);
}

三、初始化(不帶頭結點)

void InitQueue(LinkQueue &Q){
    Q.front = NULL;
    Q.rear = NULL;
}

 

四、入隊(帶頭結點)

void EnQueue(LinkQueue &Q,ElemType x){
    LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
    s->data = x;
    s->next = NULL;
    Q.rear->next = s;    //新結點插入到rear後
    Q.rear = s;        //修改表尾指針
}

五、入隊(不帶頭結點)

void EnQueue(LinkQueue &Q,ElemType x){
    LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
    s->data = x;
    s->next = NULL;
    if(Q.front == NULL){    //在空隊列中插入第一個元素
        Q.front = s;    //修改隊頭隊尾指針
        Q.rear = s;
    }else{
        Q.rear->next = s;    //新結點插入到rear結點之後
        Q.rear = s;        //修改rear指針
    }
}

 

六、出隊(帶頭結點)

bool DeQueue(LinkQueue &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;
}

七、出隊(不帶頭結點)

bool DeQueue(LinkQueue &Q,ElemType &x){
    if(Q.front == NULL)
        return false;
    LinkNode *p = Q.front;
    x = p->data;
    Q.front = p->next;
    if(Q.rear == p){
        Q.front = NULL;
        Q.rear = NULL;
    }
    free(p);
    return true;
}

八、隊列滿的條件

順序存儲——預分配的空間耗盡時隊滿

鏈式存儲——一般不會隊滿,除非內存不足

 

九、總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章