栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构学习笔记:队列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构学习笔记:队列

目录

前言

一、定义

二、操作

1.初始化

2.判断队列是否已满

3.入队

4.判断队列是否为空

5.出队

6.遍历队列

总结



前言

本文将了队列的定义,操作,应用和总结等。所举例的为基于数组的循环队列。

ps:为何在进行入队出队的时候不直接让front++和rear++,而是用(front+1)%6和(rear+1)%6?

当用++时,当到了数组最后一个元素的时,再用++即超过了数组范围,而用(front+1)%6和

rear+1)%6能避免这种情况,当加到最后一个再加时,能自动返回到第一个个数组元素。

一、定义

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

typedef struct  Queue
{
	int front ;//指向队列头部的指针
	int rear;//指向队列尾部的指针
	int* pBase;//指向数组的指针
}QUEUE;

二、操作

1.初始化

初始化队列的数组长度、前后端。

void iniQueue(QUEUE* pQ)
{
	pQ->pBase = (int*)malloc(sizeof(int) * 6);
	pQ->front = 0;
	pQ->rear = 0;
}

2.判断队列是否已满
bool isFull(QUEUE* pQ)
{
	if ((pQ->rear + 1) % 6 == pQ->front)
		return true;
	else
	{
		return false;
	}
}

3.入队
bool add(int val,QUEUE * pQ)
{
	if (isFull(pQ)) 
	{
		return	false;
	}
	else
	{
		pQ->pBase[pQ->rear] = val;
		pQ->rear=(pQ->rear+1)%6;
		return true;
	}
}

4.判断队列是否为空
bool emput_queue(QUEUE* pQ) 
{
	if (pQ->front == pQ->rear) 
	{
		return true;
	}	
	else
	{
		return false;
	}
}

5.出队
bool out_queue(QUEUE *pQ,int* val) 
{
	if (emput_queue(pQ))
	{
		return false;
	}
	else
	{
		*val = pQ->pBase[pQ->front];
		pQ->front = (pQ->front + 1) % 6;
		return true;
	}
}

6.遍历队列
void traverse_queue(QUEUE* pQ) 
{
	int i = pQ->front;
	while (i!=pQ->rear)
	{
		printf("%dn",pQ->pBase[i]);
		i = (i + 1) % 6;  
	}
}

总结

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号