使用链表实现队列2025年4月20日 | 阅读5分钟 由于本教程前一节讨论的缺点,对于实现队列的大规模应用,数组实现无法使用。数组实现的一种替代方法是链表实现队列。 具有 n 个元素的链式表示队列的存储需求为 o(n),而操作的时间需求为 o(1)。 在链式队列中,队列的每个节点包含两部分,即数据部分和链接部分。队列中的每个元素都指向内存中的下一个元素。 在链式队列中,内存中维护着两个指针,即 front 指针和 rear 指针。front 指针包含队列起始元素的地址,而 rear 指针包含队列最后一个元素的地址。 插入和删除分别在尾部和头部执行。如果 front 和 rear 都为 NULL,则表示队列为空。 下图显示了队列的链式表示。 ![]() 链式队列上的操作链式队列可以实现两个基本操作。这两个操作是插入和删除。 插入操作插入操作通过将元素添加到队列末尾来追加队列。新元素将是队列的最后一个元素。 首先,使用以下语句为新节点 ptr 分配内存。 将此新节点 ptr 插入链式队列可能存在两种情况。 在第一种情况下,我们将元素插入空队列。在这种情况下,条件 front = NULL 为真。现在,新元素将作为队列的唯一元素添加,front 和 rear 指针的 next 指针都将指向 NULL。 第二种情况是队列包含多个元素。条件 front = NULL 为假。在这种情况下,我们需要更新尾部指针 rear,以便 rear 的 next 指针指向新节点 ptr。由于这是一个链式队列,因此我们还需要将 rear 指针指向新添加的节点 ptr。我们还需要将 rear 的 next 指针设置为指向 NULL。 这样,元素就被插入到队列中了。算法和 C 实现如下。 算法
C 函数删除删除操作会移除队列中第一个插入的元素。首先,我们需要检查列表是否为空。如果列表为空,则条件 front == NULL 为真,在这种情况下,我们只需在控制台上显示“underflow”并退出。 否则,我们将删除 front 指针指向的元素。为此,将 front 指针指向的节点复制到 ptr 指针。现在,移动 front 指针,使其指向下一个节点,并释放 ptr 指针指向的节点。这是使用以下语句完成的。 算法和 C 函数如下。 算法
C 函数实现链式队列所有操作的菜单驱动程序输出 ***********Main Menu********** ============================== 1.insert an element 2.Delete an element 3.Display the queue 4.Exit Enter your choice ?1 Enter value? 123 ***********Main Menu********** ============================== 1.insert an element 2.Delete an element 3.Display the queue 4.Exit Enter your choice ?1 Enter value? 90 ***********Main Menu********** ============================== 1.insert an element 2.Delete an element 3.Display the queue 4.Exit Enter your choice ?3 printing values ..... 123 90 ***********Main Menu********** ============================== 1.insert an element 2.Delete an element 3.Display the queue 4.Exit Enter your choice ?2 ***********Main Menu********** ============================== 1.insert an element 2.Delete an element 3.Display the queue 4.Exit Enter your choice ?3 printing values ..... 90 ***********Main Menu********** ============================== 1.insert an element 2.Delete an element 3.Display the queue 4.Exit Enter your choice ?4 下一个主题循环队列 |
我们请求您订阅我们的新闻通讯以获取最新更新。