顺序形式队列实现

SeqQueue.h

#include<stdio.h>
#include<malloc.h>
#include<assert.h>

#define ElemType int

#define MAXSIZE 8   //最大队列长度

//顺序队列数据结构定义

typedef struct Queue
{
    ElemType *base;  //动态数组存储数据变量指针
    int       front;  //头指针,若队列不空,指向队列头元素
    int       rear;  //尾指针,若队列不空,指向队尾元素的下一个位置
}Queue;

void InitQueue(Queue *Q);
void EnQueue(Queue *Q, ElemType x);
void ShowQueue(Queue *Q);
void DeQueue(Queue *Q);

void GetHdad(Queue *Q, ElemType *v);
int Length(Queue *Q);
void ClearQueue(Queue *Q);
void DestroyQueue(Queue *Q);

SeqQueue.c

 #include"SeqQueue.h"

void InitQueue(Queue *Q)
{
    Q->base = (ElemType *)malloc(sizeof(ElemType) * MAXSIZE);
    assert(Q->base != NULL);
    Q->front = Q->rear = 0;
}

//入队

void EnQueue(Queue *Q, ElemType x)
{

    //队列满,直接返回
    if(Q->rear >= MAXSIZE)
        return;

    //rear先用再加

    Q->base[Q->rear++] = x;
}

void ShowQueue(Queue *Q)
{
    for(int i=Q->front; i<Q->rear; ++i)
    {
        printf("%d ",Q->base[i]);
    }
    printf("\n");
}

//出队

void DeQueue(Queue *Q)
{

    //对列空
    if(Q->front == Q->rear)
        return;

    //从对头出队,头指针加加
    Q->front++;
}

//获取对头元素

void GetHdad(Queue *Q, ElemType *v)
{
    if(Q->front == Q->rear)
        return;
    *v = Q->base[Q->front];
}

//获取队列长度
int Length(Queue *Q)
{
    return (Q->rear - Q->front);
}

//清空队列
void ClearQueue(Queue *Q)
{
    Q->front = Q->rear = 0;
}

//销毁队列,释放base申请空间
void DestroyQueue(Queue *Q)
{
    free(Q->base);
    Q->base = NULL;
}

main.c测试接口

 #include"SeqQueue.h"

void main()
{
    Queue Q;
    InitQueue(&Q);

    for(int i=1; i<=8; ++i)
    {
        EnQueue(&Q, i);
    }
    ShowQueue(&Q);
    DeQueue(&Q);
    EnQueue(&Q,10);
    ShowQueue(&Q);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值