队列在C语言中如何实现和应用,有哪些关键知识点需要掌握?

2026-04-19 05:390阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3524个文字,预计阅读时间需要15分钟。

队列在C语言中如何实现和应用,有哪些关键知识点需要掌握?

预存队列是一种先进先出(FIFO)的线性表,通常使用链表或数组来实现。队列允许从后端(rear)插入新元素(插入,enqueue),同时从前端(front)弹出元素(弹出,dequeue)。

预备

队列,是一种先进先出(FIFO)的线性表,一般来说会使用链表或者数组来实现它。

队列被允许从后端(rear)插入(insert)新元素,称作入列(push,enqueue);而从前端(front)弹出(pop)元素,称作出列(pop,dequeue)。

学术上说它和堆栈常常被同时提起,因为堆栈与队列几乎一摸一样,除了出栈时也在后端弹出元素,从而构成了后进先出(LIFO)的数据结构。

古典的单向链表/单向队列

单向链表表示的队列,出列时必须遍历整个链表,直至链尾的前一位,然后摘除链尾来实现出列操作。

毫无疑问,这一定是代价很高的。

但这种方案的优势在于任何时候任何人都能够随手写得出来。也就是说,它是最具备可手撸性的一种实现方案,虽然出列代价较高,但对于相当多的场景来说那点代价 CPU 根本不当作是事。

双向链表/双向队列

双向链表的好处是在链表头尾的操作都是 O(1) 的,代价极低,可以视作毫无代价。但这是用额外的两个指针的空间代价来达成的。对于像 std::deque<long> 这样的双向链表来说,每个链表元素的数据部分(payload)需要 8 bytes,而附着在 payload 上的指针则需要 16 bytes(典型的 64bit 计算时),相当于说超出数据实体两倍的代价,不可謂不昂贵。

阅读全文

本文共计3524个文字,预计阅读时间需要15分钟。

队列在C语言中如何实现和应用,有哪些关键知识点需要掌握?

预存队列是一种先进先出(FIFO)的线性表,通常使用链表或数组来实现。队列允许从后端(rear)插入新元素(插入,enqueue),同时从前端(front)弹出元素(弹出,dequeue)。

预备

队列,是一种先进先出(FIFO)的线性表,一般来说会使用链表或者数组来实现它。

队列被允许从后端(rear)插入(insert)新元素,称作入列(push,enqueue);而从前端(front)弹出(pop)元素,称作出列(pop,dequeue)。

学术上说它和堆栈常常被同时提起,因为堆栈与队列几乎一摸一样,除了出栈时也在后端弹出元素,从而构成了后进先出(LIFO)的数据结构。

古典的单向链表/单向队列

单向链表表示的队列,出列时必须遍历整个链表,直至链尾的前一位,然后摘除链尾来实现出列操作。

毫无疑问,这一定是代价很高的。

但这种方案的优势在于任何时候任何人都能够随手写得出来。也就是说,它是最具备可手撸性的一种实现方案,虽然出列代价较高,但对于相当多的场景来说那点代价 CPU 根本不当作是事。

双向链表/双向队列

双向链表的好处是在链表头尾的操作都是 O(1) 的,代价极低,可以视作毫无代价。但这是用额外的两个指针的空间代价来达成的。对于像 std::deque<long> 这样的双向链表来说,每个链表元素的数据部分(payload)需要 8 bytes,而附着在 payload 上的指针则需要 16 bytes(典型的 64bit 计算时),相当于说超出数据实体两倍的代价,不可謂不昂贵。

阅读全文