数据结构------链式队列(C/C++)

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"


typedef int DataType;

// 数据节点
typedef struct Node{
    DataType data;
    struct Node* next;
}Node;

// 前后指针
typedef struct LinkQueue{
    struct Node* front;
    struct Node* rear;
}LinkQueue;


bool queueEmpty(LinkQueue *queue);
bool enQueue(LinkQueue *queue, int i);
DataType getHead(LinkQueue *queue);
DataType deQueue(LinkQueue *queue);
int length(LinkQueue *queue);


int main() {

    // 初始化
    Node node = {0, NULL};
    LinkQueue lq;
    LinkQueue* linkQueue = &lq;
    linkQueue->front = &node;    // 一开始队头与队尾指针都指向头结点
    linkQueue->rear = &node;




    length(linkQueue);
    bool a = queueEmpty(linkQueue);
    printf("队列长度:%d\n", length(linkQueue));
    printf("入队:5、4、3\n");
    enQueue(linkQueue, 5);     // 入队
    enQueue(linkQueue, 4);
    enQueue(linkQueue, 3);
    printf("队列长度:%d\n", length(linkQueue));
    printf("出队:%d\n", deQueue(linkQueue));
    printf("队头元素:%d\n", getHead(linkQueue));


    return 0;
}

/**
 * 返回队列长度
 * @param queue
 * @return
 */
int length(LinkQueue *queue) {
    return queue->front->data;
}

/**
 * 获取队首值
 * @param queue
 * @return
 */
DataType getHead(LinkQueue* queue) {
    if (queueEmpty(queue)) {
        return -1;
    }
    return queue->front->next->data;
}

/**
 * 出队
 * @param queue
 * @return
 */
DataType deQueue(LinkQueue *queue) {
    if (queueEmpty(queue)) {
        return -1;
    }

    Node *temp = queue->front->next;
    int data = temp->data;

    queue->front->next = temp->next;
    // 判断是否删除的是最后一个节点
    if (temp == queue->rear) {
        // 若删除的是最后一个节点,则rear应指向头结点,此时队列为空
        queue->rear = queue->front;
    }
    free(temp);
    queue->front->data--;

    return data;
}


/**
 * 入队
 * @param queue
 * @param value
 * @return
 */
bool enQueue(LinkQueue *queue, int value) {
    queue->front->data++;

    Node *temp = (Node *) malloc(sizeof(Node));
    temp->data = value;
    temp->next = NULL;

    // 节点添加到队尾
    queue->rear->next = temp;
    queue->rear = temp;
    return true;
}


/**
 * 判断对空
 * @param queue
 * @return
 */
bool queueEmpty(LinkQueue *queue) {
    return queue->front == queue->rear;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值