【初阶数据结构篇】队列的实现(赋源码)

2024-10-09 18:50:12 浏览数 (1)

队列

1 代码位置

gitee

2 概念与结构

1.1概念

只允许在⼀端进行插⼊数据操作,在另⼀端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)

⼊队列:进⾏插⼊操作的⼀端称为队尾

出队列:进⾏删除操作的⼀端称为队头

1.2结构

队列也可以数组和链表的结构实现,使⽤链表的结构实现更优⼀些,因为如果使⽤数组的结构,出队列在数组头上出数据,效率会⽐较低。 **数组头删时间复杂度:O(N) ** 数组尾插时间复杂度:O(1) 单链表头删时间复杂度:O(1) 单链表尾插时间复杂度:O(N)

  • 乍一看二者难分伯仲,但如果我们在单链表的结构里再定义一个指向尾结点的指针,那么单链表就可以实现O(1)的尾插时间复杂度,而数组没有什么特别好的办法实现这种转变。

2 队列的实现

Queue.h

代码语言:javascript复制
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
typedef int QDataType;
typedef struct QueueNode//队列节点的结构,即单链表节点的结构
{
	QDataType data;
	struct QueueNode* next;
}QNode;
typedef struct Queue//队列的结构,定义指向队列头尾的指针,以及队列节点的个数
{
	QNode* phead;
	QNode* ptail;
	QDataType size;
}Q;

void QueueInit(Q*);

//入队列,队尾
void QueuePush(Q*, QDataType);

//出队列,队头
void QueuePop(Q*);

//队列判空
bool QueueEmpty(Q*);

//取队头数据
QDataType QueueFront(Q*);

//取队尾数据
QDataType QueueBack(Q*);

//队列有效元素个数
int QueueSize(Q*);

void QueueDestroy(Q*);

test.c

  • 用来测试我们写的函数(函数的调用)
  • 这一部分就是自己写的时候用的测试用例,随便什么都行

最好是写一个方法测试一次,不然找错误的时候会很痛苦

0 人点赞