顺序队列的初始化、入队、出队等操作
#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;
}
}
看完点个赞!!!