数据结构之队列

本文详细介绍了队列这种数据结构的工作原理及其实现方法。包括队列的基本概念、队列的操作如入队(enqueue)、出队(dequeue)、判断队列是否为空(isEmpty)以及获取队列长度(size)。此外,还提供了使用Python和C语言实现队列的具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我们要聊的是 队列(Queue)

队列(Queue):

(01) 队列中数据是按照"先进先出(FIFO, First-In-First-Out)"方式进出队列的。
(02) 队列只允许在"队首"进行删除操作而在"队尾"进行插入操作

队列也是一种线性表,很形象的比喻就是像排队一样,刚来的人入队(push)要排在队尾(rear),每次出队(pop)的都是队首(front)的人。

如下图所示:(图片来源于网络)


主要的函数有:

Queue    定义一个空队列

enqueue(item)   在队列尾部添加一个数据项,参数是数据项,无返回值

dequeue(item)   删除队列头部的数据项,无参数,返回值是被删除的数据

isEmpty(item)    检测队列是否为空

size()                 返回队列数据项的数量


python 实现

class Queue:
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return self.items == []

    def enqueue(self, item):
        self.items.insert(0,item)

    def dequeue(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

q=Queue()
		
q.enqueue(4)	
q.enqueue('dog')
q.enqueue(True)
print(q.size())

注意这里 “队首” 跟 “队尾” 是相反的。

测试代码:

>>> q.size()
3
>>> q.isEmpty()
False
>>> q.enqueue(8.4)
>>> q.dequeue()
4
>>> q.dequeue()
'dog'
>>> q.size()
2


c 语言实现:数组实现的队列,并且只能存储 int 数据(代码链接

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

/**
 * C 语言: 数组实现的队列,只能存储int数据。
 *
 * @author skywang
 * @date 2013/11/07
 */

// 保存数据的数组
static int *arr=NULL;
// 队列的实际大小
static int count;

// 创建“队列”
int create_array_queue(int sz) 
{
    arr = (int *)malloc(sz*sizeof(int));
    if (!arr) 
    {
        printf("arr malloc error!");
        return -1;
    }
    count = 0;

    return 0;
}

// 销毁“队列”
int destroy_array_queue() 
{
    if (arr) 
    {
        free(arr);
        arr = NULL;
    }

    return 0;
}

// 将val添加到队列的末尾
void add(int val) 
{
    arr[count++] = val;
}

// 返回“队列开头元素”
int front() 
{
    return arr[0];
}

// 返回并删除“队列开头元素”
int pop() 
{
    int i = 0;;
    int ret = arr[0];

    count--;
    while (i++<count)
        arr[i-1] = arr[i];

    return ret;
}

// 返回“队列”的大小
int size() 
{
    return count;
}

// 返回“队列”是否为空
int is_empty()
{
    return count==0;
}

void main() 
{
    int tmp=0;

    // 创建“队列”
    create_array_queue(12);

    // 将10, 20, 30 依次推入队列中
    add(10);
    add(20);
    add(30);

    // 将“队列开头的元素”赋值给tmp,并删除“该元素”
    tmp = pop();
    printf("tmp=%d\n", tmp);

    // 只将“队列开头的元素”赋值给tmp,不删除该元素.
    tmp = front();
    printf("tmp=%d\n", tmp);

    add(40);

    // 打印队列
    printf("is_empty()=%d\n", is_empty());
    printf("size()=%d\n", size());
    while (!is_empty())
    {
        printf("%d\n", pop());
    }

    // 销毁队列
    destroy_array_queue();
}

参考链接:

(1)http://interactivepython.org/runestone/static/pythonds/BasicDS/ImplementingaQueueinPython.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值