Queue.h
#pragma once #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<assert.h> typedef int QDataType; typedef struct QueueNode { struct QueueNode* next; QDataType val; }QNode; typedef struct Queue { QNode* phead; QNode* ptail; int size; }Queue; void QInit(Queue* q); void QDestory(Queue* q); void QPush(Queue* q,QDataType x); void QPop(Queue* q); //返回队列的头尾元素 QDataType QFront(Queue* q); QDataType QBack(Queue* q); //返回队列的元素个数 int QSize(Queue* q); //检验队列是否为空 bool QEmpty(Queue* q);
Queue.c
#include"Queue.h" void QInit(Queue* q) { assert(q); q->phead = q->ptail = NULL; q->size = 0; } void QDestory(Queue* q) { assert(q); QNode* cur = q->phead; while (cur) { QNode* next = cur->next; free(cur); cur = next; } q->phead = q->ptail = NULL; q->size = 0; } void QPush(Queue* q, QDataType x) { assert(q); QNode* newnode = (QNode*)malloc(sizeof(QNode)); if (newnode == NULL) { perror("malloc fail"); } newnode->next = NULL; newnode->val = x; //队列中只有一个结点 if (q->ptail == NULL) { q->phead = q->ptail = newnode; } else { q->ptail->next = newnode; q->ptail = newnode; } q->size++; } void QPop(Queue* q) { assert(q); assert(q->size != 0); //ptail会变成野指针 if (q->phead->next == NULL) { free(q->phead); q->phead = q->ptail = NULL; } else { QNode* next = q->phead->next; free(q->phead); q->phead = next; } q->size--; } //返回队列的头尾元素 QDataType QFront(Queue* q) { assert(q); return q->phead->val; } QDataType QBack(Queue* q) { assert(q); return q->ptail->val; } //返回队列的元素个数 int QSize(Queue* q) { assert(q); return q->size; } //检验队列是否为空 bool QEmpty(Queue* q) { assert(q); return q->size == 0; }
test.c
#include"Queue.h" void test01() { Queue q; QInit(&q); QPush(&q, 1); QPush(&q, 2); QPush(&q, 3); QPush(&q, 4); while (!QEmpty(&q)) { printf("%d->", QFront(&q)); QPop(&q); } printf("NULL"); } int main() { test01(); }
队列的链表实现
最新推荐文章于 2024-05-28 16:13:50 发布