使用非圆形单链表实现队列。队列具有一个头指针和一个尾指针,如图所示。令n表示队列中的节点数。让“入队”是通过在头插入一个新节点来实现的,而“出队”是通过从尾部删除一个节点来实现的。
以下哪一项是此数据结构分别以最省时的方式实现“入队”和“出队”的时间复杂度?
(A) Θ(1),Θ(1)
(B) Θ(1),Θ(n)
(C) Θ(n),Θ(1)
(D) Θ(n),Θ(n)答案: (B)
说明:对于入队操作,以固定的时间量执行(即Θ(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)是正确的。
这个问题的测验