C语言队列的实现

系列文章目录



队列

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、队列是什么?

队列是一种特殊的线性表,特点是FIFO,适合用链式结构实现。

二、队列的实现

1.定义数据类型

代码如下:

//自定义数据类型
typedef int QDataType;
//队列节点
typedef struct QueueNode
{
	QDataType data;
	struct QueueNode* next;
}QNODE;
//定义结构体
typedef struct Queue
{
	QNODE* head;
	QNODE* tail;
}QUEUE;

2.队列的各种接口

代码如下:

//接口
void QueueInit(QUEUE* pq);//初始化队列
void QueueDestroy(QUEUE* pq);//销毁队列
void QueuePush(QUEUE* pq,QDataType x);//入队
void QueuePop(QUEUE* pq);//出队
bool QueueEmpty(QUEUE* pq);//队列是否为空
int QueueSize(QUEUE* pq);//队列的长度
QDataType QueueFront(QUEUE* pq);//获取队头数据
QDataType QueueBack(QUEUE* pq);//获取队尾数据

3.初始化队列

代码如下:

void QueueInit(QUEUE* pq)
{
	assert(pq);
	pq->head = NULL;
	pq->tail = NULL;
}

4.销毁队列

代码如下:

void QueueDestroy(QUEUE* pq)
{
	assert(pq);
	QNODE* cur = pq->head;
	QNODE* tmp = NULL;
	while (cur)
	{
		tmp = cur->next;
		free(cur);
		cur = tmp;
	}
	pq->head = NULL;
	pq->tail = NULL;
}

5.入队

代码如下:

void QueuePush(QUEUE* pq, QDataType x)
{
	//创建新节点,并初始化
	QNODE* pNode = (QNODE*)malloc(sizeof(QNODE));
	pNode->data = x;
	pNode->next = NULL;
	if (NULL == pq->head)
	{
		//链表为空,head tail指向新节点
		pq->head = pNode;
		pq->tail = pNode;		
	}
	else
	{
		//链表不为空,在尾部插入
		pq->tail->next = pNode;
		//tail移动
		pq->tail = pq->tail->next;
	}
}

6.出队

代码如下:

void QueuePop(QUEUE* pq)
{
	QNODE* tmp;
	assert(pq);
	if (QueueEmpty(pq))
	{
		printf("Queue is empty,pop fail!\n");
		exit(-1);
	}
	else
	{
		tmp = pq->head;
		pq->head = pq->head->next; 
		if (pq->head == NULL)
		{
			//把tail也置为NULL
			pq->tail = NULL;
		}
		free(tmp);
	}
}

7.队列是否为空

代码如下:

bool QueueEmpty(QUEUE* pq)
{
	if (NULL == pq->head && NULL == pq->tail)
		return true;
	else
		return false;
}

8.求队列长度

代码如下:

int QueueSize(QUEUE* pq)
{
	QNODE* cur = pq->head;
	int size = 1;
	assert(pq);
	if (QueueEmpty(pq))
	{
		return 0;
	}
	else
	{
		while (cur != pq->tail)
		{
			size++;
			cur = cur->next;
		}
		return size;
	}
}

9.获取队头数据

代码如下:

QDataType QueueFront(QUEUE* pq)
{
	assert(pq);
	if (QueueEmpty(pq))
	{
		printf("队列为空,获取队头数据失败!\n");
		exit(-1);
	}
	return pq->head->data;
}

10.获取队尾数据

代码如下:

QDataType QueueBack(QUEUE* pq)
{
	assert(pq);
	if (QueueEmpty(pq))
	{
		printf("队列为空,获取队尾数据失败!\n");
		exit(-1);
	}
	return pq->tail->data;
}

总结

记录自己实现的队列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值