队列的基本概念

文章介绍了队列的基本概念和特点,特别是先进先出的性质。通过顺序存储结构,使用数组来模拟队列,提供了入队、出队、获取队头、队尾及队列大小等操作。代码示例展示了如何用C语言实现这个顺序存储队列容器。
摘要由CSDN通过智能技术生成

基本概念

概念:Queue是一种先进先出(First In Out,FIFO)的数据结构,它有两个开口

特点:队列容器允许从一端新增元素,从另一端移除元素

队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为

队列中进数据称为---入队push

队列中出数据成为---出队 pop

队列属于受线性表

生活中的队列:

队列的顺序存储

概念:

所谓队列的顺序存储,即利用数组模拟队列的先进先出的数据结构

题目描述

设计顺序存储队列容器,可以存放整形数据,并满足队列的特性

设计需求

队列对用户提供以下功能:

  1. 入队

  1. 出队

  1. 获取队头

  1. 获取队尾

  1. 获取队列大小

  1. 判断队列是否为空

思考:

数组的首地址端做队头还是队尾?

对于数组而言,不论首地址端做队头还是队尾,尾地址端都要选择另一个效率上没有什么太大差别这里我们采用首地址端做队头

队列循序存储 参考代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define  MAX 1000

//队列的结构体
typedef struct Queue
{
    int data[MAX];   //队列内部真实的结构、数组模拟
    int size;        //队列的大小
}Queue,*seqQueue;

//初始化队列
seqQueue init_seqQueue()
{
    //分配内存空间
    seqQueue queue = malloc(sizeof(struct Queue));

    if (queue == NULL)
    {
        return NULL;
    }

    //初始化队列大小
    queue->size = 0;

    //清空队列中所有元素
    for (int i = 0; i < MAX;i++)
    {
        queue->data[i] = 0;
    }

    return queue;
}

//入队
void push_seqQueue(seqQueue queue, int data)
{
    //本质 -- 尾插
    if (queue == NULL)
    {
        return;
    }

    if (queue->size == MAX)
    {
        printf("队列已满\n");
        return;
    }

    queue->data[queue->size] = data;
    //更新队列大小
    queue->size++;
}
//出队
void pop_seqQueue(seqQueue queue)
{
    //本质  头删
    if (queue == NULL)
    {
        return;
    }
    if (queue->size == 0)
    {
        printf("空队,无法出队\n");
        return;
    }

    for (int i = 0; i < queue->size - 1; i++)
    {
        queue->data[i] = queue->data[i + 1];
    }

    //更新数组大小
    queue->size--;
}


//返回队头
int front_seqQueue(seqQueue queue)
{
    if (queue == NULL)
    {
        return -1;
    }
    return queue->data[0];
}

//返回队尾
int back_seqQueue(seqQueue queue)
{
    if (queue == NULL)
    {
        return -1;
    }
    
    return queue->data[queue->size - 1];
}

//队列大小
int size_seqQueue(seqQueue queue)
{
    if (queue == NULL)
    {
        return -1;
    }
    return queue->size;
}

//判断是否为空
int isEmpty_seqQueue(seqQueue queue)
{
    if (queue == NULL)
    {
        return -1;
    }
    if (queue->size == 0)
    {
        return 1;
    }
    return 0;
}

//销毁队列
void destroy_seqQueue(seqQueue queue)
{
    if (queue != NULL)
    {
        free(queue);
        queue = NULL;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值