/*队列是一种先进先出的线性表,它只允许在队尾插入元素,在队头删除元素*/
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct
{
int *base;
int front;//头指针,指向对头,出队
int rear;//尾指针,指向对位,进队
}SqQueue;
//1.初始化
void InitQueue(SqQueue &Q)
{
Q.base=(int *)malloc(sizeof(int)*MAXSIZE);
if(!Q.base) printf("存储分配失败");
Q.front=Q.rear=0;
}
//2.求队列长度
int QueueLength(SqQueue Q)
{
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
//3.入队
void EnQueue(SqQueue &Q,int e)
{
if((Q.rear+1)%MAXSIZE==Q.front) printf("队列已满,入队失败");
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
}
//4.出队
void DeQueue(SqQueue &Q,int *e)
{
if(Q.front==Q.rear) printf("队空,出对失败");
*e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
}
//5.取队头元素
int GetHead(SqQueue Q)
{
if(Q.front!=Q.rear)
return Q.base[Q.front];
}
//补充6.遍历
void Print(SqQueue Q)
{
if(Q.front==Q.rear) printf("队空,遍历失败");
while(Q.front!=Q.rear)
{
printf("%d ",Q.base[Q.front]);//从队头开始遍历
Q.front=(Q.front+1)%MAXSIZE;
}
}
int main()
{
int x;
SqQueue Q;
InitQueue(Q);
EnQueue(Q,2);
EnQueue(Q,4);
EnQueue(Q,6);
EnQueue(Q,8);
printf("当前队列是:");
Print(Q);
printf("\n队头元素是%d",GetHead(Q));
DeQueue(Q,&x);
printf("\n%d出队,现在的队列是:",x);
Print(Q);
return 0;
}
【数据结构C语言】循环队列——队列的顺序表示和实现
最新推荐文章于 2022-05-22 09:32:48 发布