6-5 带头结点的链队列的基本操作 分数 10

6-5 带头结点的链队列的基本操作 分数 10_第1张图片

Status QueueInsert(LinkQueue *Q, ElemType e) {
    // 创建新节点
    LinkList newNode = (LinkList)malloc(sizeof(LNode));
    if (!newNode) {  // 分配内存失败
        return ERROR;
    }
    newNode->data = e;
    newNode->next = NULL;

    // 将新节点插入到队尾
    (*Q).rear->next = newNode;
    (*Q).rear = newNode;

    return OK;
}

Status QueueDelete(LinkQueue *Q, ElemType *e) {
    if ((*Q).front == (*Q).rear) {  // 队列为空
        return ERROR;
    }

    // 删除队头节点
    LinkList p = (*Q).front->next;
    *e = p->data;
    (*Q).front->next = p->next;

    if ((*Q).rear == p) {  // 如果删除的是队尾节点,则更新rear指针
        (*Q).rear = (*Q).front;
    }

    free(p);
    
    return OK;
}

你可能感兴趣的:(C家家精品好题,开发语言,c++,数据结构)