我正在编写一个列表,以了解不同数据结构的操作效率。 到目前为止,我有这个:
我不太确定我在这里作为链表的队列和作为链表的堆栈。任何人都可以对这个问题有任何见解吗?
答案 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