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

在这里插入图片描述

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++中,带头结点的单向实现队列通常包含两个指针:头节点front和尾节点rear。基本操作主要包括: 1. **初始化**:创建一个空的队列,即head和tail都指向NULL。 ```cpp Queue<int> queue; // 使用结构体或类实现Queue queue.head = nullptr; queue.tail = nullptr; ``` 2. **入队(enqueue)**:将元素添加到队尾。如果队列已满,则需要考虑是否扩容。 ```cpp void enqueue(int value) { Node* newNode = new Node(value); // 创建新节点 if (queue.tail == nullptr) { queue.head = newNode; queue.tail = newNode; } else { newNode->next = queue.tail; queue.tail->next = newNode; queue.tail = newNode; } } ``` 3. **出队(dequeue)**:从队首移除并返回元素。如果队列为空,则抛出异常。 ```cpp int dequeue() { if (queue.head == nullptr) { throw std::runtime_error("Queue is empty"); } int removedValue = queue.head->value; Node* temp = queue.head; queue.head = queue.head->next; delete temp; return removedValue; } ``` 4. **查看队首元素(peek)**:检查队首元素,但不删除它。同样处理空队列情况。 ```cpp int peek() const { if (queue.head == nullptr) { throw std::runtime_error("Queue is empty"); } return queue.head->value; } ``` 5. **判断队列是否为空(empty)**: ```cpp bool empty() const { return queue.head == nullptr; } ``` 6. **队列长度(size)**: ```cpp int size() const { int count = 0; Node* current = queue.head; while (current != nullptr) { count++; current = current->next; } return count; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿猿收手吧!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值