8-佇列的鏈式儲存結構的操作

成强發表於2024-07-13

順序佇列的操作

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef  int ElemType;

/*鏈式佇列的節點*/
typedef struct LinkNode{
    /*資料域*/
    ElemType data;
    /*指標域,指向下一個節點*/
    struct LinkNode * next;
} LinkNode;
/*鏈式佇列*/
typedef  struct {
    /*佇列的隊頭指標*/
    LinkNode *font;
    /*佇列的隊尾指標*/
    LinkNode *rear;
} LinkQueue;
/*初始化鏈式佇列*/
void InitQueue(LinkQueue *Q){
    /*申請頭結點*/
    Q->font=Q->rear=(LinkNode*) malloc(sizeof (LinkNode));
    Q->font->next=NULL;
}
/*判斷鏈式佇列是否為空*/
bool isEmpty(LinkQueue Q){
    return  Q.font==Q.rear;
}
/*入隊*/
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;

}
/*出隊*/
bool   DeQueue(LinkQueue *Q,ElemType *x){
    /*空隊,出隊失敗*/
    if(Q->font==Q->rear){
        return false;
    }
    /*隊首結點*/
    LinkNode  *p=Q->font->next;
    *x=p->data;

    /*從連結串列上摘下結點*/
    Q->font->next=p->next;
    if(Q->rear==p){
        /*連結串列上只有p這一個結點*/
        Q->rear=Q->font;
    }
    /*釋放結點*/
    free(p);
    return true;
}
int main() {

    printf("@@@@");

    return 0;
}

相關文章