数据结构-封装队列

  • 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);
}
posted @ 2023-09-09 09:21  冲他丫的  阅读(14)  评论(0)    收藏  举报