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

顺序队(队内元素以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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值