1.头文件(listqueue.h)
#pragma once typedef int ElemType; typedef struct QNode { ElemType data; struct QNode* next; }QNode ,*QueuePtr; typedef struct { QNode* front;//队头指针 QNode* rear;//队尾指针 }LinkQueue;//头结点的定义 //队列初始化 void InitQueue(LinkQueue* pq); //入队 bool Push(LinkQueue* pq, ElemType val); //判空 bool IsEmpty(LinkQueue* pq); //获取队头元素,但不删除 bool GetHead(LinkQueue* pq, ElemType* rtval); //出队,获取队头元素,且删除 bool DeQueue(LinkQueue* ps, ElemType* rtval); //销毁 void Destroy(LinkQueue* ps);
2.函数实现文件(listqueue.cpp)
#include<stdio.h> #include<stdlib.h> #include<assert.h> #include"listqueue.h" //队列初始化 void InitQueue(LinkQueue* pq) { assert(pq != NULL); if (pq == NULL) return; pq->front = NULL; pq->rear=NULL; } //入队 bool Push(LinkQueue* pq, ElemType val) { QNode* p = (QNode*)malloc(sizeof(QNode)); assert(p != NULL); if (p == NULL) return false; p->data = val; p->next = NULL; if (!IsEmpty(pq)) { pq->rear->next = p; pq->rear = p; } else { pq->rear = p; pq->front = p; } return true; } //判空 bool IsEmpty(LinkQueue* pq) { return pq->front == NULL;//队头都没有元素 } //获取队头元素,但不删除 bool GetHead(LinkQueue* pq, ElemType* rtval) { assert(pq != NULL); if (pq == NULL) return false; *rtval = pq->front->data; return true; } //出队,获取队头元素,且删除 bool DeQueue(LinkQueue* pq, ElemType* rtval) { assert(pq != NULL); if (pq == NULL) return false; *rtval = pq->front->data; QNode* p = (QNode*)malloc(sizeof(QNode)); p = pq->front; pq->front = p->next; free(p); if (pq->front == NULL) pq->rear == NULL; return true; } //销毁 void Destroy(LinkQueue* pq) { QNode* p ; while (pq->front!=NULL) { p = pq->front; pq->front = p->next; free(p); } pq->rear == NULL; }
3.测试文件(test.cpp)
#include <stdio.h> #include "listqueue.h" //#include <vld.h> int main() { LinkQueue lq; InitQueue(&lq); for (int i = 0; i < 20; i++) { Push(&lq, i); } ElemType val; while (!IsEmpty(&lq)) { DeQueue(&lq, &val); printf("%d\n", val); } Destroy(&lq); return 0; }
数据结构:链式队列
最新推荐文章于 2024-10-20 21:50:12 发布