顺序队列

队列也是一种运算受限的线性表,只允许在表的一端进行插入,另一端进行删除操作。进行插入的一端称作队尾,进行删除的一端称作队首队头

队列的操作:
向队列中插入新元素称为进队入队,新元素进队后就成为新的队尾元素。
从队列中删除元素称为出队离队,元素出队后,其后继元素称为队首元素。
特点:先进先出(FIFO)

队列的存储结构
队列描述:
data 数据元素:具有同一类型 ElemType,上限MaxSize
front 当前队首:指向队头元素前一个位置
rear 当前队尾:指向队尾元素

typedef struct
{
    ElemType data[MaxSize];
    int front,rear;
}SqQueue;

顺序队四要素:
空队:front==rear;
堆满:rear==MaxSize-1;
进队:rear++;data[rear] = e;
出队:front++;e = data[front];

顺序队功能函数
①初始化队列

void InitQueue(SqQueue *&q)
{
    q = (*SqQueue)malloc(sizeof(SqQueue));
    q->front = q->rear = -1; 
}

②销毁队列

void DestroyQueue(SqQueue *&q)
{
    free(q);
}

③空队列

bool EmptyQueue(SqQueue *q)
{
    return (q->front==q->rear);
}

④进队列EnQueue
条件:队不满
操作:先将rear加1,将元素添加到尾指针位置

bool EnQueue(SqQueue *&q,ElemType e)
{
    if(q->rear==MaxSize-1)
        return false;
    q->rear++;
    q->data[q->rear] = e;
    return true;
}

⑤出队列DeQueue
条件:队列不为空
操作:front加1,将front指向输出

bool DeQueue(SqQueue *&q,ElemType &e)
{
    if(q->rear==q->front)
        return false;
    q->front++;
    e = q->data[q->front];
    return true;
}

缺陷:随着不断的入队出队,rear,front指向不断上移,直到都指向表的上限,此时,队列中并没有有效元素,但又不能继续插入,front向下的存储空间也无法再此使用,造成严重浪费。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值