栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构 循环队列】循环队列|c语言|顺序结构

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构 循环队列】循环队列|c语言|顺序结构

今天复习一下数据结构里面的循环队列:

1.循环队列是顺序结构

2.循环队列的总长度是MAXSIZE - 1

3.指针实现

注:循环队列的总长度不是MAXSIZE,是MAXSIZE - 1!!! 计算式:

指针移动:(front + 1)%MAXSIZE

总长度:(rear - front + MAXSIZE)% MAXSIZE


#include 
#include 

//最大长度 
#define MAXSIZE 3

//循环队列 
typedef struct SqQueue
{
	int* data;
	int front;
	int rear;
}SqQueue;

//初始化队列
SqQueue* InitQueue()
{
	SqQueue* queue = (SqQueue*)malloc(sizeof(SqQueue));
	queue->data = (int*)malloc(MAXSIZE * sizeof(int));
	queue->front = queue->rear = 0;
	
	return queue;
} 

//清空队列
void ClearQueue(SqQueue* queue)
{
	if(queue != NULL)
	{
		queue->front = queue->rear = 0;	
		
		printf("队列已经清空!n");
	}
	else
	{
		printf("未初始化队列!n");
	}
} 

//销毁队列
void DestroyQueue(SqQueue* queue)
{
	if(queue != NULL)
	{
		free(queue);
		queue = NULL;
		
		printf("队列已经销毁!n");
	}
	else
	{
		printf("未初始化队列!n");
	} 
}

//入队
void InsertQueue(SqQueue* queue, int data)
{
	if((queue->rear + 1) % MAXSIZE != queue->front)
	{
		queue->data[queue->rear] = data;
		queue->rear = (queue->rear + 1) % MAXSIZE;
	}	
	else
	{
		printf("队列已满!n");
	}
} 

//出队 
void PopQueue(SqQueue* queue)
{
	if(queue->front != queue->rear)
	{
		queue->front = (queue->front + 1) % MAXSIZE;
	}
	else
	{
		printf("队列已空!n");
	}
}

//队长 
void  QueueLength(SqQueue* queue)
{
	printf("%dn", (queue->rear - queue->front + MAXSIZE) % MAXSIZE);
}

//队列遍历
void ThroughQueue(SqQueue* queue)
{
	int begin = queue->front;
	int end = queue->rear < queue->front ? queue->rear + MAXSIZE : queue->rear;
	int index;
	
	for (begin;begin < end;begin++)
	{
		index = begin >= MAXSIZE ? begin - MAXSIZE : begin;
		printf("%dt", queue->data[index]);
	}
	
	printf("n");
}

int main()
{
	int judge, data;
	SqQueue* queue = NULL;
	
	while(1)
	{
		fflush(stdin);
		
		printf("1.初始化队列n2.清空队列n3.销毁队列n4.入队n5.出队n6.遍历n7.队长n");
		scanf("%d", &judge);
		
		switch(judge)
		{
			case 1://初始化队列
				queue = InitQueue();
				break;
				
			case 2://清空队列
				ClearQueue(queue);
				break;
				
			case 3://销毁队列
				DestroyQueue(queue);
				break;
				
			case 4://入队
				printf("请输入一个数据:");
				scanf("%d", &data);
				InsertQueue(queue, data);
				break;
				
			case 5://出队
				PopQueue(queue);
				break;
				
			case 6://遍历
				ThroughQueue(queue);
				break;
				
			case 7://队长
				QueueLength(queue);
				break;
				
			default:
				printf("请输入正确的数字!");
		}
	}
	
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849755.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号