链式队列 - wolai 笔记
注意:
  • 第一个元素入队时的处理
  • 最后一个元素出队时的处理

1.实现

1.1 定义

typedef int ElemType;
#define MaxSize 50
typedef struct LinkNode
{
    ElemType data;
    struct LinkNode* next;
}LinkNode;
typedef struct
{
    LinkNode* front;              // 队列头指针
    LinkNode* rear;               // 队列尾指针
}LinkQueue;

1.2 初始化

// 初始化(带头结点)
void initQueue(LinkQueue& Q)
{
    // 建立头结点
    Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
    Q.front->next = NULL;   // 初始化为空
}

1.3 入队

// 入队(带头结点)
void enQueue(LinkQueue& Q, ElemType e)
{
    LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
    s->data = e;
    s->next = NULL;     // 创建新结点,插入到链尾
    Q.rear->next = s;   // 新结点插入到rear之后
    Q.rear = s;         // 修改表尾指针
}

1.4 出队

// 出队(带头结点)
bool deQueue(LinkQueue& Q, ElemType& e)
{
    if(Q.front == Q.rear)   // 队空
        return false;
    LinkNode* p = Q.front->next;
    e = p->data;
    Q.front->next = p->next;
    if(Q.rear == p)
        Q.rear = Q.front;   //  若原队列中只有一个结点,删除之后变为空 
    free(p);
    return false;
}

1.5 判空

// 判队空(带头结点)
bool queueEmpty(LinkQueue Q)
{
    if(Q.front == Q.rear)
        return true;
    else 
        return false;
}




Comment
avatar
Dongnian
A salty fish swimming in the sea of deep learning!
Follow Me
Announcement
Welcome to My Personal Blog!
If Not, Please Visit Gitee Mirror.