【03】顺序队列的初始化、入队、出队等操作

顺序队列的初始化、入队、出队等操作

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 4
typedef int ElemType;	//ElemType表示队列中存放的数据类型
typedef struct Queue
{
          
   
	ElemType data[MAXSIZE];
	int front;		//头指针;
	int rear;		//尾指针
}SqQueue;
void InitQueue(SqQueue* Q);   //初始化队列
int QueueEmpty(SqQueue* Q);  //判断循环队列是否为空
int QueueFull(SqQueue* Q);  //判断循环队列是否为满
int EnterQueue(SqQueue* Q,ElemType e); //进队,将元素e插入循环队列尾部
int  DeleteQueue(SqQueue* Q,ElemType* e); //出队, 用e返回队头结点的值
void  GetQhead(SqQueue* Q,ElemType* e);  //获得队头结点的值,用e返回
void  PrintQueue(SqQueue* Q);  //输出队列中的结点值

int main()
{
          
   
	SqQueue cycleq;
	SqQueue *q;
	q=&cycleq;
	int i;
	int flag;
	int x;
	int qhead;
	ElemType a[]={
          
   11,22,33};	//将数组a中的元素入队

	InitQueue(q);		//初始化队列
	//入队****************************
	for(i=0;i<3;i++)
	{
          
   
		flag=EnterQueue(q,a[i]);
		if(flag==1)
			printf("%4d入队成功!
",a[i]);
	}
	printf("队列为:
");
	PrintQueue(q);
	printf("
");
	//入队/***************************
	//出队/***************************
	printf("**************************
");
	flag=DeleteQueue(q,&x);
	if(flag==1)
		printf("%4d出队成功",x);
	printf("队列为:
");
	PrintQueue(q);
	printf("
");
	GetQhead(q,&qhead);
	printf("队列首部元素为:%4d
",qhead);
	//出队****************************
	flag=EnterQueue(q,66);
		if(flag==1)
			printf("%4d入队成功!
",66);
	printf("队列为:
");
	PrintQueue(q);
	printf("
");
	GetQhead(q,&qhead);
	printf("队列首部元素为:%4d
",qhead);
	//出队****************************
	printf("**************************
");
	flag=DeleteQueue(q,&x);
	if(flag==1)
		printf("%4d出队成功
",x);
	printf("队列为:
");
	PrintQueue(q);
	printf("
");
	GetQhead(q,&qhead);
	printf("队列首部元素为:%4d
",qhead);
	//出队****************************
	flag=EnterQueue(q,77);
		if(flag==1)
			printf("%4d入队成功!
",77);
	printf("队列为:
");
	PrintQueue(q);
	printf("
");
	GetQhead(q,&qhead);
	printf("队列首部元素为:%4d
",qhead);
	return 0;
}
void InitQueue(SqQueue* Q)   //初始化队列
{
          
    
  Q->front=0;
  Q->rear=0;
}
int QueueEmpty(SqQueue* Q)  //判断循环队列是否为空
{
          
    
    if(Q->front==Q->rear)
       return 1;            //队空返回1
    else
return 0;                 //队不空返回0
}
int  QueueFull(SqQueue* Q)  //判断循环队列是否为满
{
          
    
   if(Q->front==(Q->rear+1)%MAXSIZE)
       return 1;  //队满返回1
    else
   return 0; //队不满
}
int EnterQueue(SqQueue* Q,ElemType e) //进队,将元素e插入循环队列尾部
{
          
    
 if( QueueFull(Q)==1)
   {
          
    printf("队满!
");
    return 0;
    }
 else
 {
          
    
    Q->data[Q->rear]=e;
    Q->rear=(Q->rear+1)%MAXSIZE;       // 队尾指针后移
    return 1;
    }
}
int  DeleteQueue(SqQueue* Q,ElemType* e) //出队, 用e返回队头结点的值
{
          
    
if( QueueEmpty(Q)==1)
  {
          
    printf("队空!
");
    return 0;
   }
else
{
          
    *e=Q->data[Q->front]; //取队头结点的值
  Q->front=(Q->front+1)%MAXSIZE;  // 队头指针后移
  return 1;
}
}
void  GetQhead(SqQueue* Q,ElemType* e)  //获得队头结点的值,用e返回
{
          
   
  if( QueueEmpty(Q)==1)
       printf("队空!
");   
  else
      *e=Q->data[Q->front]; //取队头结点的值

}
void  PrintQueue(SqQueue* Q)  //输出队列中的结点值
{
          
    int i=Q->front;
  while(i!=Q->rear)
  {
          
   
  printf("%4d",Q->data[i]);
  i=(i+1)%MAXSIZE;
  }
}
经验分享 程序员 微信小程序 职场和发展