【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入队成功!\n",a[i]);
	}
	printf("队列为:\n");
	PrintQueue(q);
	printf("\n");
	//入队/***************************
	//出队/***************************
	printf("**************************\n");
	flag=DeleteQueue(q,&x);
	if(flag==1)
		printf("%4d出队成功",x);
	printf("队列为:\n");
	PrintQueue(q);
	printf("\n");
	GetQhead(q,&qhead);
	printf("队列首部元素为:%4d\n",qhead);
	//出队****************************
	flag=EnterQueue(q,66);
		if(flag==1)
			printf("%4d入队成功!\n",66);
	printf("队列为:\n");
	PrintQueue(q);
	printf("\n");
	GetQhead(q,&qhead);
	printf("队列首部元素为:%4d\n",qhead);
	//出队****************************
	printf("**************************\n");
	flag=DeleteQueue(q,&x);
	if(flag==1)
		printf("%4d出队成功\n",x);
	printf("队列为:\n");
	PrintQueue(q);
	printf("\n");
	GetQhead(q,&qhead);
	printf("队列首部元素为:%4d\n",qhead);
	//出队****************************
	flag=EnterQueue(q,77);
		if(flag==1)
			printf("%4d入队成功!\n",77);
	printf("队列为:\n");
	PrintQueue(q);
	printf("\n");
	GetQhead(q,&qhead);
	printf("队列首部元素为:%4d\n",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("队满!\n");
    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("队空!\n");
    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("队空!\n");   
  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;
  }
}

在这里插入图片描述
看完点个赞!!!

原创文章 16 获赞 21 访问量 1544

猜你喜欢

转载自blog.csdn.net/The_Handsome_Sir/article/details/105559799