C语言实现队列(队列的顺序表示)

在这里插入图片描述

结构体

#define ElemType int

#define MAXSIZE 8

typedef struct Queue {
	ElemType *base;//这个指针指向初始化的动态分配存储空间
	int front;//用于记录队头下标
	int rear;//用于记录队尾下标,表示能放的下标
}Queue;

在这里插入图片描述

入队

void EnQueue(Queue *Q, ElemType x) {
	//队列满了,rear下标指向MAXSIAZE
	if (Q->rear >= MAXSIZE) return;
	//在队列不满的情况下放入rear的下标
	Q->base[Q->rear++] = x;
}

打印输出

void ShowQueue(Queue *Q) {
	for (int i = Q->front; i < Q->rear; i++) {
		printf("%d ", Q->base[i]);
	}
	printf("\n");
}

在这里插入图片描述

在这里插入图片描述

出队

void DeQueue(Queue *Q) {
	//头下标和尾下标指向相同的空间,队列就为空
	if (Q->front == Q->rear)return;
	//不为空时,让下标指向下一个地址单元,前面的就出队了
	Q->front++;
}

在这里插入图片描述

获取队头元 素

void GetHdad(Queue *Q, ElemType *v) {
	if (Q->front == Q->rear)return;

	*v = Q->base[Q->front];
}

在这里插入图片描述

求长度

int Length(Queue *Q) {
	return Q->rear - Q->front;
}

清空队

void ClearQueue(Queue *Q) {
	Q->front = Q->rear = 0;
}

销毁队

void DestroyQueue(Queue *Q) {
	free(Q->base);
	Q->base == NULL;
}

问题

队列的最大容量是8,出了一个,本来可以再入一个元素,却无法进入。
在这里插入图片描述
空间没有达到百分百的利用率
在这里插入图片描述
所以循环队列应运而生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值