千家信息网

C++中队列有什么用

发表于:2024-10-11 作者:千家信息网编辑
千家信息网最后更新 2024年10月11日,这篇文章主要介绍C++中队列有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表
千家信息网最后更新 2024年10月11日C++中队列有什么用

这篇文章主要介绍C++中队列有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

    1. 队列的概念及结构

    队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头


    2. 队列的实现

    2.1 queue.h

    #include#include#include#includetypedef int QDataType;typedef struct QueueNode{        struct QueueNode*next;        QDataType data;}QueueNode;typedef struct Queue{        QueueNode *head;        QueueNode *tail;}Queue;void QueueInit(Queue *pq);void QueueDestory(Queue *pq);void QueuePush(Queue *pq,QDataType x);void QueuePop(Queue *pq);QDataType QueueFront(Queue *pq);QDataType QueueBack(Queue *pq);bool QueueEmpty(Queue *pq);int QueueSize(Queue *pq);

    2.2 queue.c

    #include"queue.h"void QueueInit(Queue *pq){        assert(pq);        pq->head = pq->tail = NULL;}void QueueDestory(Queue *pq){        assert(pq);        QueueNode *cur = pq->head;        while (cur)        {                QueueNode *next = cur->next;                free(cur);                cur = next;        }        pq->head = pq->tail = NULL;}void QueuePush(Queue *pq, QDataType x){        assert(pq);        QueueNode *newnode = (QueueNode*)malloc(sizeof(QueueNode));        if (newnode == NULL)        {                printf("malloc fail\n");                exit(-1);        }        newnode->data = x;        newnode->next = NULL;        if (pq->tail == NULL)        {                pq->head = pq->tail = newnode;        }        else        {                pq->tail->next = newnode;                pq->tail = newnode;        }}void QueuePop(Queue *pq){        assert(pq);        assert(!QueueEmpty(pq));        if (pq->head->next == NULL)        {                free(pq->head);                pq->head = pq->tail = NULL;        }        else        {                QueueNode *next = pq->head->next;                free(pq->head);                pq->head = next;        }}QDataType QueueFront(Queue *pq){        assert(pq);        assert(!QueueEmpty(pq));        return pq->head->data;}QDataType QueueBack(Queue *pq){        assert(pq);        assert(!QueueEmpty(pq));        return pq->tail->data;}bool QueueEmpty(Queue *pq){        assert(pq);        return pq->head == NULL;}int QueueSize(Queue *pq){        int size = 0;        QueueNode *cur = pq->head;        while (cur)        {                QueueNode *next = cur->next;                ++size;                cur = cur->next;        }        return size;}

    2.3 test.c

    #include"queue.h"void TestOne(){        Queue q;        QueueInit(&q);        QueuePush(&q, 1);        QueuePush(&q, 2);        QueuePush(&q, 3);        QueuePush(&q, 4);        while (!QueueEmpty(&q))        {                printf("%d  ", QueueFront(&q));                QueuePop(&q);        }        printf("\n");        QueueDestory(&q);}int main(){        TestOne();        return 0;}

    以上是"C++中队列有什么用"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

    0