【C数据结构】(第五站)——排“队”啦-创新互联

文章目录
  • 一、SQueue.h
    • 1、头文件
    • 2、循环顺序队的结构体
    • 3、函数声明
    • 4、其他
  • 二、Main_squeue.c
    • 主函数
  • 三、Fun_squeue.c
    • 1、初始化循环队列
    • 2、入队
    • 3、出队
    • 4、获取队头元素
    • 5、计算队列元素个数
    • 6、显示队列中的信息
    • 7、判断队满
    • 8、判断队空

在这里插入图片描述

平鲁ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

本站主要介绍循坏队列的相关操作!!!

队列是一种先进先出的存储结构,即:在队尾入,在队头出!

一、SQueue.h 1、头文件
#include#include#include
2、循环顺序队的结构体
typedef struct SeqQueue {ElemType data[Max];
	int front;//队头指针
	int rear;//队尾指针
}SQueue;
3、函数声明
void InitSQueue(SQueue* Q);//初始化顺序队
bool EnSQueue(SQueue* Q, ElemType x);//入队
bool DeSQueue(SQueue* Q);//出队
bool GetSQHead(SQueue Q, ElemType* x);//获取队头元素
void SQLength(SQueue Q);//计算队列元素个数
void PrintSQueue(SQueue Q);//显示队列中的信息
bool SQIsFull(SQueue Q);//判断队满
bool SQIsEmpty(SQueue Q);//判断队空
4、其他
#define Max 10//定义队列中元素的大个数
typedef int ElemType;
二、Main_squeue.c 主函数
void test() {SQueue L;
	InitSQueue(&L);
	int i = 0;
	for (i = 1; i<= 5; i++)
		EnSQueue(&L, i);
	PrintSQueue(L);
	DeSQueue(&L);
	DeSQueue(&L);
	PrintSQueue(L);
	ElemType x;
	GetSQHead(L, &x);
	printf("队头元素为:%d\n", x);
	SQLength(L);
}
int main() {test();
	return 0;
}
三、Fun_squeue.c

循环顺序队的主要功能包括:入队、出队、获取队头元素、计算队列元素个数、显示队列中的信息、判断队满、判断队空!!!

1、初始化循环队列

将队头和队尾指针都指向空,表示此时队列为空状态!

在这里插入图片描述

void InitSQueue(SQueue* Q) {Q->front = Q->rear = NULL;
}
2、入队

队尾入队!

在这里插入图片描述

bool EnSQueue(SQueue* Q, ElemType x) {assert(Q);
	if (SQIsFull(*Q))//判断队满否
		return false;
	Q->data[Q->rear] = x;
	Q->rear = (Q->rear + 1) % Max;//队尾指针加1取模
	return true;
}
3、出队

队头出队!

在这里插入图片描述

bool DeSQueue(SQueue* Q) {assert(Q);
	if (SQIsEmpty(*Q))
		return false;
	printf("出队元素为:%d\n", Q->data[Q->front]);//打印出队元素
	Q->front = (Q->front + 1) % Max;//队头指针加1取模
	return true;
}
4、获取队头元素
bool GetSQHead(SQueue Q, ElemType* x) {if (SQIsEmpty(Q))
		return false;
	*x = Q.data[Q.front];//记录队头元素
	return true;
}
5、计算队列元素个数
void SQLength(SQueue Q) {int len = 0;
	len = (Q.rear - Q.front + Max) % Max;
	printf("队列中的元素个数为:%d\n", len);
}
6、显示队列中的信息
void PrintSQueue(SQueue Q) {if (SQIsEmpty(Q)) {printf("队列为空!\n");
		return;
	}
    //法一:
	while (Q.rear != Q.front) {printf("%d ", Q.data[Q.front]);
		Q.front = (Q.front + 1) % Max;
	}
    //法二:
	//int i = 0;
	//for (i = Q.front; i != Q.rear; i = (i + 1) % Max)
	//	printf("%d ", Q.data[i]);
	printf("\n");
}
7、判断队满

此次循环队列,采用空一个位置来区别队空队满的!

在这里插入图片描述

bool SQIsFull(SQueue Q) {//此处我们采用的是空出一个存储单元来区分队空队满
	return (Q.rear + 1) % Max == Q.front;
}
8、判断队空

在这里插入图片描述

bool SQIsEmpty(SQueue Q) {return Q.rear == Q.front;
}

区分队空与队满的方法:
a、牺牲一个存储单元来区分;
b、增设一个数据成员来区分,例如:队空条件Q.size == 0,队满条件
Q.size == Max ;
c、增设tag标记数据成员,当tag等于0时,若因删除导致Q.rear == Q.front,则为队空,当tag等于1时,若因插入导致 Q.rear == Q.front ,则为队满。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:【C数据结构】(第五站)——排“队”啦-创新互联
URL链接:http://csdahua.cn/article/dohpid.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流