考研数据结构——C语言实现顺序队列

  1. 定义队列结构:首先定义了一个名为Queue的结构体,它包含一个整数数组data用于存储队列中的元素,以及两个整数frontrear分别表示队列的头部和尾部。

  2. 初始化队列initialize函数用于初始化队列,将frontrear都设置为-1,表示队列为空。

  3. 判空函数isEmpty函数用于判断队列是否为空,如果front等于-1,则队列为空。

  4. 判满函数isFull函数用于判断队列是否已满,如果(rear + 1) % MAX_SIZE等于front,则队列已满。这里使用% MAX_SIZE是为了实现循环队列的特性,即当rear到达数组末尾时,下一个位置会循环到数组的开始。

  5. 入队函数enqueue函数用于向队列中添加一个元素。首先检查队列是否已满,如果已满则打印错误信息并返回。如果队列为空,则将frontrear都设置为0,表示队列中只有一个元素。否则,将rear移动到下一个位置。最后,将新元素添加到data数组中。

  6. 出队函数dequeue函数用于从队列中移除一个元素。首先检查队列是否为空,如果为空则打印错误信息并退出程序。然后,将front指向的元素值返回,如果frontrear相等,则将它们都设置为-1,表示队列为空。否则,将front移动到下一个位置。

  7. 查看队头函数peek函数用于查看队列头部的元素,但不移除它。如果队列为空,则打印错误信息并退出程序。否则,返回front指向的元素值。

  8. 主函数main函数是程序的入口点。首先,创建一个Queue类型的变量queue并初始化。然后,连续入队5个元素。接着,连续出队4个元素,并打印它们。最后,打印队列头部的元素,此时队列中应该只剩下一个元素。

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

//定义队列结构
#define MAX_SIZE 100

typedef struct Queue {
	int data[MAX_SIZE];
	int front, rear;
}Queue;

//初始化队列
void initialize(Queue* queue) {
	queue->front = -1;
	queue->rear = -1;
}

//判空
int isEmpty(Queue* queue) {
	return queue->front == -1;
}

//判满
int isFull(Queue* queue) {
	return (queue->rear + 1) % MAX_SIZE == queue->front;
}

//入队
void enqueue(Queue* queue, int value) {
	if (isFull(queue)) {
		printf("Queue overflow!\n");
		return;
	}
	if (isEmpty(queue))
		queue->front = queue->rear = 0;
	else
		queue->rear = (queue->rear + 1) % MAX_SIZE;
	queue->data[queue->rear] = value;
}

//出队
int dequeue(Queue* queue) {
	if (isEmpty(queue)) {
		printf("Queue underflow!\n");
		exit(1);
	}
	int value = queue->data[queue->front];
	if (queue->front == queue->rear)
		queue->front = queue->rear = -1;
	else
		queue->front = (queue->front + 1) % MAX_SIZE;
	return value;
}

//查看队头
int peek(Queue* queue) {
	if (isEmpty(queue)) {
		printf("Queue is empty!\n");
		exit(1);
	}
	return queue->data[queue->front];
}

//主函数
int main() {
	Queue queue;
	initialize(&queue);

	enqueue(&queue, 1);
	enqueue(&queue, 2);
	enqueue(&queue, 3);
	enqueue(&queue, 4);
	enqueue(&queue, 5);

	printf("Dequeued element:%d\n", dequeue(&queue));
	printf("Dequeued element:%d\n", dequeue(&queue));
	printf("Dequeued element:%d\n", dequeue(&queue));
	printf("Dequeued element:%d\n", dequeue(&queue));

	printf("Front element:%d\n", peek(&queue));
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值