【数据结构笔记】队列的表示与实现

本文详细介绍了两种常见的队列数据结构——顺序队和链队。包括它们的定义、初始化过程、基本操作如入队、出队及获取队首元素的方法,并讨论了循环队列中判断队空与队满的不同策略。

顺序队(队内元素以int为例)

定义

typedef struct
{
	int* base;
	int front;
	int rear;
}SqQueue;

顺序队的初始化

//顺序栈的初始化
bool InitQueue(SqQueue& Q)
{
	Q.base = new int[MAXSIZE];
	if (!Q.base) return 0;		//存储分配失败
	Q.front = Q.rear = 0;
	return 1;
}

判断循环队列队空与队满的几种方法

  1. 课本方法:
    队空 Q.rear == Q.front
    队满 (Q.rear+1) % MAXSIZE == Q.front

  2. 设置标记位

设置初始标记: bool flag=false
入队
Q.rear = (Q.rear + 1) % MAXSIZE;
flag = true;
出队
Q.front = (Q.front + 1) % MAXSIZE;
flag = false;

判断条件:
当队列为空时:(rear == front && flag==false)
当队列为满时:(rear == front && flag == true
  1. count计数
    队空:count == 0
    队满:当有元素入队时,count++,count和队列的maxsize相等

顺序队入队

bool EnQeueu(SqQueue& Q, int e)
{
	if ((Q.rear + 1) % MAXSIZE == Q.front) return 0;	//队满
	Q.base[Q.rear] = e;
	Q.rear = (Q.rear + 1) % MAXSIZE;
	return 1;
}

顺序队出队

bool DeQueue(SqQueue& Q, int& e)
{
	if (Q.front == Q.rear) return 0;	//队空
	e = Q.base[Q.front];
	Q.front = (Q.front + 1) % MAXSIZE;
}

取队头元素

int GetHead(SqQueue Q)
{
	if (Q.front != Q.rear) return Q.base[Q.front];
}

链队(队内元素以int为例)

定义

//结点结构
typedef struct QNode
{
	int data;
	struct QNode* next;
}QNode,* QueuePtr;
//队列指针
typedef struct
{
	QueuePtr front;		//队头指针
	QueuePtr rear;		//队尾指针
}LinkQueue;

初始化

bool InitQueue(LinkQueue& Q)
{
	Q.front = Q.rear = new QNode;
	Q.rear->next = NULL;
	return 1;
}

链队的入队

void EnQueue(LinkQueue& Q, int e)
{
	//新建结点
	QueuePtr p;
	p = new QNode;
	p->data = e;
	p->next == NULL;
	//入队
	Q.rear->next = p;
	Q.rear = p;			//尾指针后移
}

链队的出队

bool DeQueue(LinkQueue& Q, int& e)
{
	if (Q.front == Q.rear) return 0;	//队空

	QNode* p = Q.front->next;
	e = p->data;
	Q.front->next = p->next;
	//若删除的元素为最后一个元素,需对队尾指针重新赋值,避免丢失
	if (Q.front->next == Q.rear) Q.rear = Q.front;

	delete p;
	return 1;
}

取队头元素

int GetHead(LinkQueue Q)
{	//队非空
	if (Q.front != Q.rear) return Q.front->next->data;
}
内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化训练,到执行分类及结果优化的完整流程,并介绍了精度评价通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置结果后处理环节,充分利用ENVI Modeler进行自动化建模参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值