当前位置: 首页 > news >正文

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素——完整可运行代码

#include <stdio.h>

#define MAXSIZE 100
typedef int ElemType;

typedef struct 
{
	ElemType data[MAXSIZE];
	int front;
	int rear;
	
}Queue;

//初始化
void initQueue(Queue *Q)
{
	Q->front = 0;
	Q->rear = 0;
}

//判断队列是否为空
int isEmpty(Queue *Q)
{
	if (Q->front == Q->rear)
	{
		printf("空的\n");
		return 1;
	}
	else
	{
		return 0;	
	}
}

//出队
ElemType dequeue(Queue *Q)
{
	if (Q->front == Q->rear)
	{
		printf("空的\n");
		return 0;
	}
	ElemType e = Q->data[Q->front];
	Q->front++;
	return e;
}
//队尾满了,调整队列(挪位置)
int queueFull(Queue *Q)
{
	if (Q->front > 0)//队尾满了,但是队列还有空间
	{
		int step = Q->front;
		for (int i = Q->front; i <= Q->rear; ++i)
		{
			Q->data[i - step] = Q->data[i];
		}
		Q->front = 0;
		Q->rear = Q->rear - step;
		return 1;
	}
	else
	{
		printf("真的满了\n");
		return 0;
	}
}

//入队
int equeue(Queue *Q, ElemType e)
{

	if (Q->rear >= MAXSIZE)
	{
		if(!queueFull(Q))
		{
			return 0;
		}
	}
	Q->data[Q->rear] = e;
	Q->rear++;
	return 1;
}

//获取队头元素(数据)
int getHead(Queue *Q, ElemType *e)
{
	if (Q->front == Q->rear)
	{
		printf("空的\n");
		return 0;
	}
	*e = Q->data[Q->front];
	return 1;
}

int main()
{
	
	Queue q;
	initQueue(&q);

	equeue(&q, 10);
	equeue(&q, 20);
	equeue(&q, 30);
	equeue(&q, 40);
	equeue(&q, 50);//分别入队10,20,30,40,50
	
	printf("%d\n",dequeue(&q));
	printf("%d\n",dequeue(&q));//10,20出队列
	ElemType e;
	getHead(&q, &e);//获取此时队头的数据
	printf("%d\n",e);

	return 0;
}


动态分配内存:

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

#define MAXSIZE 100
typedef int ElemType;

typedef struct 
{
	ElemType *data;
	int front;
	int rear;
	
}Queue;

//初始化
Queue* initQueue()
{
	Queue *q = (Queue*)malloc(sizeof(Queue));
	q->data = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);
	q->front = 0;
	q->rear = 0;
	return q;
}

//判断队列是否为空
int isEmpty(Queue *Q)
{
	if (Q->front == Q->rear)
	{
		printf("空的\n");
		return 1;
	}
	else
	{
		return 0;	
	}
}

//出队
ElemType dequeue(Queue *Q)
{
	if (Q->front == Q->rear)
	{
		printf("空的\n");
		return 0;
	}
	ElemType e = Q->data[Q->front];
	Q->front++;
	return e;
}
//队尾满了,调整队列
int queueFull(Queue *Q)
{
	if (Q->front > 0)
	{
		int step = Q->front;
		for (int i = Q->front; i <= Q->rear; ++i)
		{
			Q->data[i - step] = Q->data[i];
		}
		Q->front = 0;
		Q->rear = Q->rear - step;
		return 1;
	}
	else
	{
		printf("真的满了\n");
		return 0;
	}
}

//入队
int equeue(Queue *Q, ElemType e)
{

	if (Q->rear >= MAXSIZE)
	{
		if(!queueFull(Q))
		{
			return 0;
		}
	}
	Q->data[Q->rear] = e;
	Q->rear++;
	return 1;
}

//获取队头元素
int getHead(Queue *Q, ElemType *e)
{
	if (Q->front == Q->rear)
	{
		printf("空的\n");
		return 0;
	}
	*e = Q->data[Q->front];
	return 1;
}

int main()
{
	
	Queue *q = initQueue();

	equeue(q, 10);
	equeue(q, 20);
	equeue(q, 30);
	equeue(q, 40);
	equeue(q, 50);
	
	printf("%d\n",dequeue(q));
	printf("%d\n",dequeue(q));
	ElemType e;
	getHead(q, &e);
	printf("%d\n",e);

	return 0;
}

 

相关文章:

  • 基于C8051F020单片机的液晶显示,LCD1602并口驱动,单片机并口驱动LCD1602
  • 【嵌入式学习2】基础语法
  • ROM(只读存储器) 、SRAM(静态随机存储器) 和 Flash(闪存) 的详细解析
  • SpringCloud构建一个服务步骤
  • 在刀刃上发力:如何精准把握计划关键节点
  • 数据结构——串
  • Java 大视界 -- Java 大数据中的数据隐私保护技术在多方数据协作中的应用(147)
  • B树和 B+树
  • 如何实现单点登录?
  • 【js逆向入门】图灵爬虫练习平台 第九题
  • Linux进程控制(四)之进程程序替换
  • Spring Boot02(数据库、Redis)02---java八股
  • HTML网页代码预览器
  • 【Linux】Ubuntu 24.04 LTS 安装 Hadoop-3.4.1
  • TCP | 序列号和确认号 [逐包分析] | seq / ack 详解
  • 视频播放器(watermelon Player)vue2使用体验(教程版)
  • Android Compose 框架按钮与交互组件模块源码深度剖析(二)
  • windows清除电脑开机密码,可保留原本的系统和资料,不重装系统
  • others-rustdesk远程
  • 带你从入门到精通——自然语言处理(十. BERT)
  • 印巴在克什米尔实控线附近小规模交火,巴防长发出“全面战争”警告
  • 中共中央政治局召开会议,分析研究当前经济形势和经济工作,中共中央总书记习近平主持会议
  • 福耀科技大学发布招生章程:专业培养语种为英语,综合改革省份选考需含物化
  • 李良生已任应急管理部党委委员、政治部主任
  • 远香湖畔“戏”味浓,“吾嘉有戏”探索戏剧与图书跨界融合
  • 2025航天文化艺术论坛在上海举办