- list_queue.h
#ifndef LIST_QUEUE_H
#define LIST_QUEUE_H
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define TYPE int
// 节点结构
typedef struct Node
{
TYPE data;
struct Node* next;
}Node;
// 设计链式队列结构
typedef struct ListQueue
{
Node* head; // 队头指针
Node* tail; // 队尾指针
size_t cnt; // 节点数量
}ListQueue;
// 创建队列
ListQueue* create_list_queue(void);
// 队空
bool empty_list_queue(ListQueue* queue);
// 入队
void push_list_queue(ListQueue* queue,TYPE data);
// 出队
bool pop_list_queue(ListQueue* queue);
// 队头
TYPE head_list_queue(ListQueue* queue);
// 队尾
TYPE tail_list_queue(ListQueue* queue);
// 数量
size_t size_list_queue(ListQueue* queue);
// 销毁队列
void destroy_list_queue(ListQueue* queue);
#endif//LIST_QUEUE_H
- list_queue.c
#include "list_queue.h"
// 创建节点
Node* create_node(TYPE data)
{
Node* node = malloc(sizeof(Node));
node->data = data;
node->next = NULL;
return node;
}
// 创建队列
ListQueue* create_list_queue(void)
{
ListQueue* queue = malloc(sizeof(ListQueue));
queue->head = NULL;
queue->tail = NULL;
queue->cnt = 0;
return queue;
}
// 队空
bool empty_list_queue(ListQueue* queue)
{
return 0 == queue->cnt;
}
// 入队
void push_list_queue(ListQueue* queue,TYPE data)
{
Node* node = create_node(data);
if(0 == queue->cnt)
{
queue->head = node;
queue->tail = node;
}
else
{
queue->tail->next = node;
queue->tail = node;
}
queue->cnt++;
}
// 出队
bool pop_list_queue(ListQueue* queue)
{
if(empty_list_queue(queue)) return false;
Node* temp = queue->head;
queue->head = temp->next;
free(temp);
queue->cnt--;
if(0 == queue->cnt) queue->tail = NULL;
return true;
}
// 队头
TYPE head_list_queue(ListQueue* queue)
{
return queue->head->data;
}
// 队尾
TYPE tail_list_queue(ListQueue* queue)
{
return queue->tail->data;
}
// 数量
size_t size_list_queue(ListQueue* queue)
{
return queue->cnt;
}
// 销毁队列
void destroy_list_queue(ListQueue* queue)
{
while(pop_list_queue(queue));
free(queue);
}
标签:node,Node,封装,队列,list,queue,tail,ListQueue,数据结构
From: https://www.cnblogs.com/ljf-0804/p/17688915.html