【C数据结构】简单顺序队列代码

 

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

#define MAXLEN 10
typedef int datatype;
typedef struct{
	datatype data[MAXLEN];
	int front;//头
	int rear;//尾
}SeqQueue; 
/*
队头front+1是头元素下标,队尾rear是尾元素下标 
*/
void InitQueue(SeqQueue *&Q);
int InQueue(SeqQueue *&Q,datatype x);
void OutQueue(SeqQueue *&Q,datatype &x);
int Length_Queue(SeqQueue *Q);
int IsEmpty(SeqQueue *Q);
int IsFull(SeqQueue *Q);
void ReadFront_Q(SeqQueue *&Q,datatype &x);//读取队头 
void ReadRear_Q(SeqQueue *&Q,datatype &x);//读取队尾 

int main(){
	SeqQueue *Q;
	int x_F,x_R,x;
	InitQueue(Q);
	printf("队长:%d ",Length_Queue(Q));
	printf("判断是否空? %d , 判断是否满? %d\n",IsEmpty(Q),IsFull(Q));
	for(int i=0;i<10;i++){
		//入队5个元素 
		InQueue(Q,i+1);
		ReadFront_Q(Q,x_F);
		ReadRear_Q(Q,x_R);
		printf("当前队头:%d,当前队尾:%d\n",x_F,x_R);
	}
	//MAXLEN=10,此时队满 
	printf("队长:%d ",Length_Queue(Q));
	printf("判断是否空? %d , 判断是否满? %d\n\n",IsEmpty(Q),IsFull(Q));
	for(int i=0;i<3;i++){
		//出队3个元素 
		OutQueue(Q,x); 
		ReadFront_Q(Q,x_F);
		ReadRear_Q(Q,x_R);
		printf("当前队头:%d,当前队尾:%d,出队元素:%d\n",x_F,x_R,x);
	}
	printf("队长:%d ",Length_Queue(Q));
	printf("判断是否空? %d , 判断是否满? %d\n\n",IsEmpty(Q),IsFull(Q));
	for(int i=0;i<7;i++){
		//出队7个元素 
		OutQueue(Q,x);
		ReadFront_Q(Q,x_F);
		ReadRear_Q(Q,x_R);
		printf("当前队头:%d,当前队尾:%d,出队元素:%d\n",x_F,x_R,x);
	}
	printf("队长:%d ",Length_Queue(Q));
	printf("判断是否空? %d , 判断是否满? %d\n",IsEmpty(Q),IsFull(Q));
}

void InitQueue(SeqQueue *&Q){
	Q=new SeqQueue;
	Q->front=Q->rear=-1;
}
int InQueue(SeqQueue *&Q,datatype x){
	//入队 -成功返回1,失败返回0 
	if(IsFull(Q))//队满 
		return 0;
	//队未满	
	Q->data[++Q->rear]=x;//尾先自增 
		
	return 1; 
}
void OutQueue(SeqQueue *&Q,datatype &x){
	//出队 
	if(!IsEmpty(Q))
		x=Q->data[++Q->front];//头先自增 
}
int Length_Queue(SeqQueue *Q){
	return Q->rear-Q->front;
}
int IsEmpty(SeqQueue *Q){
	return Q->rear==Q->front;
}
int IsFull(SeqQueue *Q){
	//满返回1,未满返回0 
	if(Length_Queue(Q)>=MAXLEN)
		return 1;
	return 0;
}
void ReadFront_Q(SeqQueue *&Q,datatype &x){
	if(!IsEmpty(Q))
		x=Q->data[Q->front+1];
}

void ReadRear_Q(SeqQueue *&Q,datatype &x){
	if(!IsEmpty(Q))
		x=Q->data[Q->rear];
} 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值