数据结构C语言实现-队列

C语言实现队列

运行环境:Dev-C++ 5.11
编程语言:C

一、队列是什么?

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

二、有关数据及操作:数据类型,初始化,队列长度,入队、出队

在此说明关于本程序的一些注意事项:

  1. 本程序使用数组存储数据,默认存储数据个数为100,实际只能存储99(具体看第6点和程序代码),可以手动调,在自定义宏里
  2. 本程序将队列实现为循环队列,即不用考虑队列经一系列操作后可用空间变小的问题。
  3. 在调用函数时,用到的都是指针,记得在主程序调用函数加&
  4. 队列中数据类型可以根据所需的类型变化,但在本程序中一个程序中只能定义一种类型队列,如过需要多类型队列,建议使用其他语言。在本程序中只需修改自定义宏var所代表的类型。
  5. 创建队列后必须进行初始化,可以自行改进,这里仅作为示范。
  6. rear指向队尾:指向队列尾后一个空位置。可以修改,让数组全部存储数据,自行思考
    队列初始化,front即空队列:

    满队列:(这里可以看一下队列判满操作)rear指向队尾空位置,front指向队首元素。下图:表示队列以及循环排列。
    在这里插入图片描述

三、代码

代码如下(示例):

#include <stdio.h>
#include <stdlib.h>
#define MaxQueue 100
#define var int

//typedef int var; 与宏作用一致 
typedef struct node				//自定义队列 
{
	var entry[MaxQueue];
	int front;
	int rear;
}Queue;

void InitQueue(Queue *Q)		//初始化数组队列 
{
	Q->front=0;
	Q->rear=0;
}

int QueueLength(Queue *Q)		//求队列的长度 
{
	return (Q->rear - Q->front + MaxQueue)%MaxQueue; 
}

int QueueEmpty(Queue *Q)		//判队是否空 
{
	if(Q->front==Q->rear)
		return 0;
	else
		return 0;
}


int QueueFull(Queue *Q)			//判队是否为满 
{
	if((Q->rear + 1)%MaxQueue==Q->front)
		return 1;
	else
		return 0;
}

//入队 
void EnQueue(Queue *Q,var e)		//插队或排队(在队尾) 
{
	if(QueueFull(Q))
	{
		printf("Queue is Full !!!");
		exit(0);
	}
	else
	{
		Q->entry[Q->rear]=e;
		Q->rear=(Q->rear+1)%MaxQueue; 
	} 
} 

// 出队 
void DeQueue(Queue *Q,var *e)
{
	if(QueueEmpty(Q))
	{
		printf("Queue is Empty !!!");
		exit(0);
	}
	else
	{
		*e=Q->entry[Q->front];
		Q->front=(Q->front+1)%MaxQueue; 
	}
}

//打印队列的信息 
void PrintQueue(Queue *Q)
{
	int i=Q->front;
	while(i!=Q->rear)
	{
		printf("%d\n",Q->entry[i]);
		i=(i+1)%MaxQueue;
	}
} 
int main()
{
	//示例 
	Queue q;
	InitQueue(&q);
	var v=6;
	EnQueue(&q,v);
	PrintQueue(&q);
	
	system("pause");
	return 0;
}

总结

队列作为基本的数据结构,是我们学习数据结构的前奏。在以后的数据结构学习当中,它可以和栈一起组合,实现复杂问题的求解。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心,你呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值