【数据结构C语言】循环队列——队列的顺序表示和实现

/*队列是一种先进先出的线性表,它只允许在队尾插入元素,在队头删除元素*/
#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;


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值