数据结构之队列(数组形式)——C++具体实现

        队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间(类似于数组),并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素的存储位置。另一个要素为队列最大容量(MaxSize)。下面是其C++具体实现。

1.队列的定义

typedef struct Queue
{
    DataType queue[MaxSize];  //DataType为队列数据类型,可以为int/char等,MaxSize为队列最大容量
    int front; //队头指针(非指针变量,指示位置)
    int rear;  //队尾指针
}SeqQueuue;

2.队列的初始化

SeqQueue *SQ=new SeqQueu;  //动态分配创建队列
DataType  data;            //确定队列存放数据类型
void InitQueue(SeqQueue *SQ)
{
    if(!SQ) return;
    SQ->front=SQ->rear=0;
}

3.判断队列是否为满

int IsFull(SeqQueue *SQ)
{
    if(!SQ) return 0;
    if(SQ->rear==MaxSize)
    {
        return 1;
    }
    return 0;
}

4.判断队列是否为空

int IsEmpty(SeqQueue *SQ)
{
    if(!SQ) return 0;
    if(SQ->front==SQ->rear)
    {
        return 1;
    }
    return 0;
}

5.入队,将元素data插入到队列SQ中

int EnterQueue(SeqQueue *SQ,DataType data)
{
    if(!SQ) return 0;
    if(IsFull(SQ))
    {
        return 0;   //插入失败
    }
    SQ->queue[SQ->rear]=data;
    SQ->rear++;
    return 1;
}

6.出队,将元素data移除

int DeleteQueue(SeqQueue *SQ,DataType *data)
{
    if(!SQ||IsEmpty) return 0;
    if(!data) return 0;
    *data=SQ->queue[SQ->front];
    for(int i=SQ->front+1;i<SQ->rear;i++)
    {
       SQ->queue[i-1]=SQ->queue[i];       
    }
    SQ->rear--;
    return 1;    
}

7.出队(另一种方法)

int DeleteQueue2(SeqQueue *SQ,DataType *data)
{
    if(!SQ||IsEmpty) return 0;
    *data=SQ->queue[SQ->front];
    SQ->front=(SQ->front)+1;
    return 1;   
}

8.获取队列元素中的个数

int getLength(SeqQueue *SQ)
{
    if(!SQ) return 0;
    return SQ->rear-SQ->front;
    return 1;   
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芷菁小可爱~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值