首页 > 其他分享 >数据结构-封装队列

数据结构-封装队列

时间:2023-09-09 09:33:50浏览次数:43  
标签:node Node 封装 队列 list queue tail ListQueue 数据结构

  • 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

相关文章

  • C# 封装 C++的dll
    C#的程序引用C++的dll时,首先要保证两者基于的平台一致,比如都是x64,或者都是x86的程序,否者两者之间不能直接调用,然后,要保证两者的数据类型可以相互识别,相互通用。在此重点介绍几个常用的数据转换。C++的char*和char[]数组,对应到C#的string类型C++的Handle类型,一般是一个很......
  • 数组模拟链表 模拟栈和队列 单调栈和队列(9/7 9/8)
    单链表数组模拟链表可以加快速度,更利于优化算法#include<iostream>usingnamespacestd;constintN=100010;inte[N],ne[N],head,idx;voidinit(){head=-1;idx=0;}voidadd_head(intx){e[idx]=x;ne[idx]=head;head=idx++;}void......
  • uniapp项目实践总结(十三)封装文件操作方法
    导语:在日常APP开发过程中,经常要进行文件的保存、读取列表以及查看和删除文件等操作,接下来就看一下具体的方法。目录原理分析方法实现实战演练案例展示原理分析主要是以下API。uni.saveFile:保存文件到本地缓存列表;uni.getSavedFileList:获取保存文件列表;uni.getSa......
  • 【设计模式】命令模式Command:在一次请求中封装多个参数
    (目录)命令模式使用频率不算太高。如果熟悉函数式编程的话,会发现命令模式完全没有使用的必要,甚至在业务开发的场景中也很少使用到。不过对于想要找到正确抽象的设计者来说,命令模式的设计思想却非常值得借鉴。命令和查询的区别:查询,获取一个不可变的结果;命令,改变状态,不一定获......
  • Java泛型对象在http请求和响应对象中的封装
    Java泛型对象在http请求和响应对象中的封装publicclassMySystemBaseResVo<T>{//注意:类的后面需要带上<T>,否则数据无法封装privateStringerr_no;privateStringerr_tips;privateTdata;publicStringgetErr_no(){returnerr_no;}......
  • React项目笔记-环境搭建、路由封装(跳转Navigate、懒加载lazy)、模块化样式引入、状态管
    环境准备nodev16.15.0npm8.5.5AntDesignofReact:https://ant.design/docs/react/introduce-cn一,创建项目npminitvite√Projectname:...vite-project-react√Selectaframework:»React√Selectavariant:»TypeScript然后使用vscode打开项目,由于......
  • 代码随想录刷题记录——栈与队列篇
    栈与队列理论基础 栈stack:先进后厨队列queue:先进先出STL(C++标准库)STL栈和队列属于容器适配器(containeradapter)优先队列priority_queue:默认大根堆,如果是pair<a,b>,默认比较a大小如果需要比较b大小,且小根堆,可以如下实现232.用栈实现队列题目链接 pop操作时,当......
  • 线程安全的队列:使用Monitor模式和C++11多线程库
    线程安全的队列:使用Monitor模式和C++11多线程库引言在多线程编程中,数据共享是一个关键的问题。如果多个线程需要访问同一个数据结构,不正确的管理会导致数据不一致甚至程序崩溃。本文将介绍如何使用C++11的多线程库和Monitor模式来实现一个线程安全的队列。Monitor模式Monitor模式......
  • 深入理解消息队列与事件驱动架构
    什么是消息队列?消息队列是一种通信模式,用于将消息从一个发送者传递到一个或多个接收者。它们允许应用程序之间以异步、松耦合的方式进行通信。消息队列通常包括消息代理(如RabbitMQ、ApacheKafka)和消息消费者。为什么使用消息队列?使用消息队列的好处包括:解耦应用程序:消息队列允许......
  • 数据结构-表
    表: 顺序(数组)、链式(链表)一、顺序表数据项:存储元素的内存首地址表的容量元素的数量运算:创建、销毁、清空、插入、删除、访问、查询、修改、排序、遍历注意:1、要确保数据元素的连续性2、不能越界array顺序表#include<stdio.h>#include<stdbool.h>#......