各种数据结构的最坏情况

时间:2012-12-16 21:26:18

标签: data-structures

我正在编写一个列表,以了解不同数据结构的操作效率。 到目前为止,我有这个:

efficiencies

我不太确定我在这里作为链表的队列和作为链表的堆栈。任何人都可以对这个问题有任何见解吗?

1 个答案:

答案 0 :(得分:1)

唯一的错误是Pop的{​​{1}}应为Queue as Linked List with pointer to front

为了完整性,可能值得列出操作的复杂性,例如搜索任何元素,删除任何元素,按索引获取,按索引删除等。

将队列作为链接​​列表(指向前面的指针):

推送:你需要在结尾处插入一个元素,但是你只有一个指向开头的指针,所以你需要遍历所有元素才能到达终点。

O(1)

Pop:你需要在开头删除元素,所以你只需将指针重新指定给第二个元素的开头即可。

current = head
while (current.next != null)
  current = current.next
current.next = newItem

将队列作为链接​​列表(指向前后的指针):

推送:你需要在末尾插入一个元素,并且你有一个指向结尾的指针,所以你可以在恒定的时间内添加它。

removedItem = head
head = head.next

Pop:与单个链表的pop相同。

tail.next = newItem
tail = newItem

堆叠为链接列表:

推送:在开头插入一个项目,很容易在一定时间内完成。

removedItem = head
head = head.next

Pop:删除第一项,很容易在恒定时间内完成。

newItem.next = head
head = newItem

堆叠为数组:

推送:在最后一个索引处插入项目,很容易在恒定时间内完成。

removedItem = head
head = head.next

Pop:删除最后一个索引处的项目,很容易在恒定时间内完成。

last = last+1
array[last] = newItem