1.Queuec.h头文件函数名
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>
typedef int QDataType;
typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QNode;
typedef struct Queue
{QNode* head;QNode* tail;
}Queue;
//初始化
void InitQueue(Queue* pq);
//销毁
void DestoryQueue(Queue* pq);
//入队
void PushQueue(Queue* pq,QDataType x);
//出队
void PopQueue(Queue* pq);
//判空
bool QueueEmpty(Queue* pq);
//个数存在
int QueueSize(Queue* pq);
//队头数据
QDataType Queuefront(Queue* pq);
//队尾数据
QDataType Queuebank(Queue* pq);
2.Queuec.c源文件函数代码实现
#include"Queuec.h"
//初始化
void InitQueue(Queue* pq)
{assert(pq);pq->head = pq->tail = NULL;
}
//销毁
void DestoryQueue(Queue* pq)
{QNode* ret = pq->head;while (ret){QNode* count = ret->next;free(ret);ret = count;}pq->head = pq->tail = NULL;
}
//入队
void PushQueue(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("error");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 PopQueue(Queue* pq)
{assert(pq);assert(pq->tail && 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;}
}
//判空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->head == NULL && pq->tail == NULL;
}
//个数存在
int QueueSize(Queue* pq)
{assert(pq);int count = 0;QNode* ret = pq->head;while (ret){count++;ret = ret->next;}return count;
}
//队头数据
QDataType Queuefront(Queue* pq)
{assert(pq);assert(pq->head);return pq->head->data;
}
//队尾数据
QDataType Queuebank(Queue* pq)
{assert(pq);assert(pq->tail);return pq->tail->data;
}
3.testc.c测试代码实现
#include"Queuec.h"
int main()
{Queue q;InitQueue(&q);PushQueue(&q, 1);PushQueue(&q, 2);PushQueue(&q, 3);PushQueue(&q, 4);//总个数printf("总个数\n");printf("%d\n", QueueSize(&q));printf("对头元素\n");printf("%d\n", Queuefront(&q));printf("对尾元素\n");printf("%d\n", Queuebank(&q));printf("全部出队\n");while (!QueueEmpty(&q)){printf("%d", Queuefront(&q));PopQueue(&q);}DestoryQueue(&q);
}