队列

1.队列的特点:

队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点:

  1. 队列中的数据元素遵循“先进先出”(First In First Out)的原则。
  2. 在队尾添加元素,在队头删除元素。

2.队列操作:

  1. 队列初始化(QueueInit)
  2. 入队(QueuePush)
  3. 出队(QueuePop)
  4. 获取队首元素(QueueFront)
  5. 求队列元素的个数(QueueSize)
  6. 判断队列是否为空(QueueEmpty)

3.队列的存储结构:

队列与栈一样是一种线性结构,因此以常见的线性表如数组、链表作为底层的数据结构。
本文中,我们以链表为底层数据结构构建队列。


3.队列的代码:

1.Queue.h

#pragma once

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>

typedef int QDataType;
typedef struct QNode{
	QDataType data;
	struct QNode *pNext;
}QNode;

typedef struct Queue{
	QNode *pFront;
	QNode *pRear;
	int size;
}Queue;

2.Queue.c

#include "Queue.h"

//队列初始化
void QueueInit(Queue *pq)
{
	assert(pq);
	pq->pFront = pq->pRear = NULL;
	pq->size = 0;
}


//入队
void QueuePush(Queue *pq, QDataType data)
{
	assert(pq);
	pq->size++;
	QNode *QNewNode = (QNode*)malloc(sizeof(QNode));
	QNewNode->data = data;
	QNewNode->pNext = NULL;
	//空链表的情况
	if (pq->pRear == NULL){
		pq->pFront = pq->pRear = QNewNode;
		return;
	}
	//一般情况
	pq->pRear->pNext = QNewNode;
	pq->pRear = QNewNode;
	
}

//出队
void QueuePop(Queue *pq)
{
	assert(pq);
	assert(pq->size > 0);
	pq->size--;
	QNode *pOldFront = pq->pFront;
	pq->pFront = pq->pFront->pNext;
	free(pOldFront);
	if (pq->pFront == NULL)
	{
		pq->pRear = NULL;
	}
	
}
//获取队首元素
void QueueFront(Queue *pq)
{
	assert(pq);
	assert(pq->size > 0);
	return(pq->pFront->data);
}


//判断队列是否为空
//1为空,0为不空
void QueueEmpty(Queue *pq)
{
	return pq->size == 0 ? 1 : 0;
	
}

//求队列中元素个数
void QueueSize(Queue *pq)
{
	return pq->size;
}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值