欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 队列(链表实现)

队列(链表实现)

2025/2/22 16:59:12 来源:https://blog.csdn.net/b19839356939/article/details/142220791  浏览:    关键词:队列(链表实现)

代码帖

头文件 Queue.h

#pragma once
#include<iostream>
#include<assert.h>
using namespace std;
//数组而言并不合适,对头出数据需要挪动顺序
//单链表更为合适,尾插头删
typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;QDataType data;
}QNode;typedef struct Queue
{QNode* head;QNode* 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);
int QueueSize(Queue* pq);
bool QueueEmpty(Queue* pq);

CPP文件 Queue.cpp

#include"Queue.h"
void QueueInit(Queue* pq)
{assert(pq);pq->head=pq->tail = NULL;
}void QueueDestory(Queue* pq)
{assert(pq);QNode* cur = pq->head;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->head = pq->tail = NULL;
}//队尾入
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode =(QNode*) malloc(sizeof(QNode));if (newnode == NULL){cout << "malloc fail!" << endl;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(pq->head);//注意几个节点!if (pq->head->next == NULL){free(pq->head);pq->head = pq->tail = NULL;//防止野指针}else{QNode* next = pq->head->next;free(pq->head);pq->head = next;}
}QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->head);return pq->head->data;}
QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->head);return pq->tail->data;
}int QueueSize(Queue* pq)
{assert(pq);int size = 0;QNode* cur = pq->head;while (cur){++size;cur = cur->next;}return size;
}
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->head == NULL;
}

测试文件 Test.cpp

#include"Queue.h"void TestQueue()
{Queue q;QueueInit(&q);}int main()
{//TestStack();Queue q;QueueInit(&q);QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);QueuePush(&q, 4);QueuePush(&q, 5);while (!QueueEmpty(&q)){cout << QueueFront(&q) << endl;QueuePop(&q);}QueueDestory(&q);return 0;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词