循环队列的进队 、出队、和判空判满、初始化等操作C语言数据结构(注释详细)

用C语言定义循环队列,分别用函数实现下列功能:
{

  1. 初始化队列;
  2. 进队运算:实现元素的进队运算;
  3. 出队运算:实现元素的出队运算;
  4. 队列的判空判满运算:判断一个队列是空还是满;

}

正在学c语言数据结构的同学最好不要照搬,通过注释自己摸索写出属于自己的代码才是最重要的。

话不多说,直接上代码:

#include<stdio.h>
#define MAXSIZE 6//定义循环队列的最大长度

//定义结构体
typedef struct {
    
    //将结构体改名为queue
	int data[MAXSIZE];
	int front;//定义头指针
	int rear;//定义尾指针
	int num;//记录队列内含的数据数量
}queue;

//初始化队列
void initqueue(queue *q) {
    
    
	q->front = q->rear = q->num = 0;//初始化让队列的前后指针都指向0
}

//判断队列是否为空
int judgeempty(queue *q) {
    
    
	if (q->front == q->rear)//若前后指针都指向同一个节点,则判断其为空
		return 1;
	else
		return 0;
}

//判断队列是否已满
int judgefull(queue *q) {
    
    
	if ((q->rear + 1) % MAXSIZE == q->front)//若尾指针+1取余后仍等于头指针,则判断该队列已满
		return 1;
	else
		return 0;
}

//进队运算
int inputqueue(queue *q,int data) {
    
    
	if (judgefull(q)) {
    
    
		printf("队列已满,请使用出队运算后重试!");
		return 0;
	}
	q->data[q->rear] = data;//将进队的数据赋值给尾指针所指向的位置,之后让后指针后移一位
	q->rear = (q->rear + 1) % MAXSIZE;//这样运算可以达到0-5的数字循环
	++q->num;
	return 1;
}

//出队运算
int outputqueue(queue *q){
    
    
	if (judgeempty(q)) {
    
    
		printf("队列为空,请使用入队运算后重试!\n");
		return 0;
	}
	q->front = (q->front + 1) % MAXSIZE;
	--q->num;
	return q->data[q->front-1];
}

//输出全部队列元素
int outputall(queue *q) {
    
    
	int i;
	if (judgeempty(q)) {
    
    
		printf("当前队列为空,请先使用入队运算后重试!\n");
		return 0;
	}
	printf("当前队列内数据为:\n队头-》");
	for (i = 0; i < q->num; i++)
		printf("[%d]", q->data[q->front+i]);
	printf("《-队尾\n\n队列长度为:%d\n\n",q->num);
}
/********************主测试程序********************/
int main()
{
    
    
	int num, data, i;
	queue q;//初始化队列
	initqueue(&q);
	while (1)
{
    
    
	printf("\t提示:系统已自动初始化队列\n\n");
	printf("\t\t1.进队运算\n\n");
	printf("\t\t2.出队运算\n\n");
	printf("\t\t3.输出队列中全部数据\n\n");
	printf("\t\t4.退出程序\n\n");
A:	printf("*********************\n请选择功能项,并按回车执行:");
	scanf("%d", &num);
	switch (num)
	{
    
    
	case 1:	//进队运算
	{
    
    
		printf("请输入要进队的数据个数(最大值为5):\n");
		scanf("%d", &num);
		printf("请输入要进队的数据(中间用空格分开):");
		while (num) {
    
    
			scanf("%d", &data);
			inputqueue(&q, data);
			num--;
		}
		printf("入队操作成功!\n");
		outputall(&q);
		goto A;
	}
	case 2://出队运算
	{
    
    
		if (data=outputqueue(&q))
			printf("数据[%d]出队成功!\n",data);
		outputall(&q);
		goto A;
	}
	case 3://输出队列中全部数据
	{
    
    
		outputall(&q);
		goto A;
	}
	case 4://退出程序
	{
    
    
		system("cls");
		printf("******************>>>>退出成功!");
		return;
	}
	}
}
}

猜你喜欢

转载自blog.csdn.net/qq_33522195/article/details/117877351