📜  门| GATE CS 2018 |问题 11

📅  最后修改于: 2021-09-25 06:54:42             🧑  作者: Mango

队列是使用非循环单向链表实现的。队列有一个头指针和一个尾指针,如图所示。让 n 表示队列中的节点数。通过在头部插入一个新节点来实现“入队”,通过从尾部删除一个节点来实现“出队”。

环状链表对于该数据结构,以下哪一项是最省时的“入队”和“出队”实现的时间复杂度?
(A) Θ(1), Θ(1)
(B) Θ(1), Θ(n)
(C) Θ(n), Θ(1)
(D) Θ(n), Θ(n)答案:(乙)
说明:对于入队操作,在恒定时间量(即 Θ(1))内执行,因为它只修改两个指针,即,

Create a Node P.
P-->Data = Data
P-->Next = Head
Head = P

对于出队操作,我们需要单链表的倒数第二个节点的地址来使其下一个指针为NULL。由于在单向链表中我们无法访问它的前一个节点,所以需要遍历整个链表来得到链表的倒数第二个节点,即,

temp = head;
 While( temp-Next-->Next != NULL){
        temp = temp-Next;
        }
temp-->next = NULL;
Tail = temp;

因为,我们为每个出队遍历整个链接,所以时间复杂度将为 Θ(n)。

选项(B)是正确的。
这个问题的测验