从中间删除元素的最佳数据结构是什么?

时间:2012-01-17 19:53:56

标签: c++ stack

数据结构必须像堆栈一样。只有一个区别。我想从任何索引不仅持续弹出。当我弹出元素n时,索引为N > n的元素必须交换为N-1。有什么想法吗?

P.S。

  1. 将元素n推入堆栈的最后一个索引。
  2. 然后把它弹出来。
  3. 然后删除stack[n]
  4. 是一个坏主意。

3 个答案:

答案 0 :(得分:4)

我认为您正在寻找链接列表。

答案 1 :(得分:1)

链接列表(std::list)将允许您从中间删除O(1)复杂度的元素,并自动“拉”后面的元素。您可以使用push_front使用类似堆栈的链接列表。但是,您需要注意访问链接列表中的元素是O(n),因为您需要从列表的头部开始,然后沿着链接从一个元素走到下一个元素,直到您到达元素n(因此没有O(1)索引)

基本上你需要

  • 创建迭代器
  • advance它定位n
  • 从迭代器中获取元素
  • erase迭代器当前指向的元素

可以找到一些示例代码here

答案 2 :(得分:0)

您需要实现链接列表,但与数组不同,链接列表中的顺序由每个对象中的指针确定。因此,您无法使用索引来访问元素。