考研C语言数据结构-循环队列

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

#define maxSize 6

// 定义循环队列数据类型
typedef struct {

	int data[maxSize];
	int front;// 队头指针
	int rear;// 队尾指针 ---> 指向队尾元素的下一个位置 ---> 区分对空与满条件
}CQueue;

void initCQueue(CQueue &Q) {

	Q.front = Q.rear = 0;
}

// 判断队空
bool isEmpty(CQueue Q) {

	if(Q.front == Q.rear)
		return true;

	return false; 
}

// 入队 <--- 队尾
bool enQueue(CQueue &Q, int e) {

	// 判断队列是否已满
	if((Q.rear + 1) % maxSize == Q.front)
		return false;

	Q.data[Q.rear] = e;
	Q.rear = (Q.rear + 1) % maxSize;

	return true;
}

// 出队 <--- 队头
bool deQueue(CQueue &Q, int &e) {

	// 判断队列是否为空
	if(isEmpty(Q))
		return false;

	e = Q.data[Q.front];
	Q.front = (Q.front + 1) % maxSize;

	return true;
}

// 查询队头元素
bool getHead(CQueue &Q, int &e) {

	if(isEmpty(Q))
		return false;

	e = Q.data[Q.front];

	return true;
}

// 获取队列长度
int getLength(CQueue Q) {

	return (Q.rear + maxSize - Q.front) % maxSize;
}

int main(void) {

	CQueue Q;
	initCQueue(Q);

	enQueue(Q, 1);
	enQueue(Q, 2);
	enQueue(Q, 3);

	int length = getLength(Q);
	printf("此时队列长度:%d\n", length);

	enQueue(Q, 4);
	enQueue(Q, 5);
	if(!enQueue(Q, 6)){
	
		printf("队列已满,无法入队。\n");
	}

	int e = -1;
	deQueue(Q, e);
	printf("出队元素:%d\n", e);
	deQueue(Q, e);
	printf("出队元素:%d\n", e);
	deQueue(Q, e);
	printf("出队元素:%d\n", e);
	deQueue(Q, e);
	printf("出队元素:%d\n", e);
	deQueue(Q, e);
	printf("出队元素:%d\n", e);

	system("pause");
	return 0;
}
posted @ 2022-05-11 13:39  dqlai  阅读(54)  评论(0)    收藏  举报