肥猫学习笔记--C语言数据结构与算法(二)----队列

本文围绕C语言中队列这一数据结构展开。介绍了队列是操作受限的线性表,具有先进先出特性。阐述了创建队列所需的结构体要素及函数,还详细说明了对队列的操作,如判断满与空、入队、出队等,入队出队时利用除余方法解决指针回头问题。

C语言数据结构与算法(二)

什么是队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列的特性

队列,顾名思义,就像排队买东西一样,排在前面买东西的买完走人,排在后面的要排着队等到买完东西再走人,也就是先进先出,后进后出的顺序

创建队列

要想创建一个栈,我们首先需要一个结构体,其中有
1、元素
2、对头
3、队尾
4、数量
5、容量

#define TYPE int
typedef struct Queue
{
	TYPE* base;
	int size;	//容量
	int head;	//队头
	int tall;	//队尾
	int cnt;	//数量
}Queue;

然后是创建队列的函数

Queue* create_queue(int len)//创建
{
	Queue* queue=malloc(sizeof(Queue));
	queue->base = malooc(sizeof(TYPE)*len);
	queue->len = len;
	queue->head = 0;
	queue->tall = -1;
	queue->cnt = 0;//元素的数量
	return queue;
	}

对队列进行操作

判断队列满

队满的条件是队列里面的元素大于或等于队列的长度

bool full_queue(Queue* queue)//队满
{
	if(queue->len <= queue->cnt)
		return true;
		return false;
	}

判断队列空

判断队列是否为空就用cnt来进行判断

bool empty_queue(Queue* queue)//队空
{
	if(0 == queue->cnt)
	{
		return true;
		}
		return false;
	}

入队

对于队列来说,当入队入满,出队完之后,队头和队尾所指向的是队列的最后一个元素,怎么让它回头,回到最开始的地方是一个难点,在这里我用的是使用除余的方法

bool push_queue(Queue* queue, TYPE data)
{
	//1.判断是否队满
	//2.回头:指针指完最后一个又回到第一个
	if(full_queue(queue)) return false;
	queue->tall = (queue->tall+1) % queue->size;//%多少就是0-多少的数字,定义tall的初始值为-1,所以要+1
	queue->base[queue->tall]=data;
	queue->cnt++;
	return true;
}

出队

与入队同理

bool pop_queue(Queue* queue)
{
	if(empty_queue(queue)) return false;
	queue->head = (queue->head+1) % queue->size;
	queue->base[queue->heal]=data;
	queue->cnt--;
	return true;
	}

队头元素

比较简单,不再细说

TYPE* head_queue(Queue* queue)
{
	if(empty_queue(queue)) return NULL;
	return queue->base+queue->head;
	}

队尾元素

TYPE*tall_queue(Queue* queue)
{
	if(empty_queue(queue)) return NULL;
	return queue->base+queue->tall;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值