数据结构【队列-使用顺序存储实现队列】

队列是什么:

定义:队列是一种操作受限制的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。

逻辑结构:线性结构

运算:先进先出的特性,创建,入队,出队,读队头元素

存储结构:顺序存储,链式存储


代码分块:

1.创建队列

typedef struct{
	int data[MaxSize];
	int size;
	int front,rear;//指向队列首尾 
}SqQueue;

//初始化 
void InitQueue(SqQueue *S){
	S->front=S->rear=0;//使队首队尾指针指向0位置 
	S->size=0;
}

2.入队操作

//入队操作 
bool EnQueue(SqQueue *S,int enNum){
	if(S->size>=MaxSize){//判断是否队满 
		return false;
	}
	S->data[(S->rear)%MaxSize] = enNum;//将数据元素插入队尾(取余使其取值闭环)
	S->rear++;//队尾指针后移 
	S->size++; 
	return true; 
	
}

 3.出队操作

//出栈操作 
bool outQueue(SqQueue *S,int *outNum){
	if(S->size<=0){//判断队是否为空 
		return false;
	}
	*outNum = S->data[(S->front)%MaxSize];//取队首元素 
	S->front++;//队首指针后移 
	S->size--;
	return true;
	
}

 4.读队首元素

void searchTop(SqQueue S){//读取队首元素 
	int readNum=0;
	readNum = S.data[(S.front)%MaxSize];//读取队首元素 
	printf("队首元素为%d",readNum);
}

完整代码:

//使用顺序存储实现队列 
#include <stdio.h>
#include <stdlib.h>

#define MaxSize 10

typedef struct{
	int data[MaxSize];
	int size;
	int front,rear;//指向队列首尾 
}SqQueue;

//初始化 
void InitQueue(SqQueue *S){
	S->front=S->rear=0;//使队首队尾指针指向0位置 
	S->size=0;
}

//入队操作 
bool EnQueue(SqQueue *S,int enNum){
	if(S->size>=MaxSize){//判断是否队满 
		return false;
	}
	S->data[(S->rear)%MaxSize] = enNum;//将数据元素插入队尾(取余使其取值闭环)
	S->rear++;//队尾指针后移 
	S->size++; 
	return true; 
	
}

//出栈操作 
bool outQueue(SqQueue *S,int *outNum){
	if(S->size<=0){//判断队是否为空 
		return false;
	}
	*outNum = S->data[(S->front)%MaxSize];//取队首元素 
	S->front++;//队首指针后移 
	S->size--;
	return true;
	
}

void searchTop(SqQueue S){//读取队首元素 
	int readNum=0;
	readNum = S.data[(S.front)%MaxSize];//读取队首元素 
	printf("队首元素为%d",readNum);
}

int main(){
	SqQueue S;//声明一个队列 
	InitQueue(&S);//初始化
	
	//入队操作
	int enNum = 0;//记录入队列元素的变量 
	bool flag;
	printf("请向队列中输入元素(输入99结束):");
	scanf("%d",&enNum);
	while(enNum != 99){
		flag=EnQueue(&S,enNum);//入队列 
		if(flag){
			printf("\n请向队列中输入元素(输入99结束):");
			scanf("%d",&enNum);
		}else{
			printf("入队列失败");
			exit(0);
		}
		
	} 
	
	//出队操作
	int outNum = 0;//存储出队元素的变量 
	char elect = NULL;//判断是否继续出队的变量 
	printf("是否出队元素(y|x):");
	scanf("%s",&elect);
	while(elect == 'y'){
		flag = outQueue(&S,&outNum);	//调用出队操作 
		if(flag == false){
			printf("\n队已空");
			exit(0);
		}else{
			printf("\n出队元素为%d",outNum);
		}
		printf("\n是否出队元素(y|x):");
		scanf("%s",&elect);
	} 
	
	//查询队头元素
	searchTop(S); 

}

 


运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值