使用堆栈与仅使用双向链接列表有什么好处

时间:2016-12-06 13:31:35

标签: java algorithm sorting stack quicksort

作为一项任务,我必须迭代地而不是递归地实现快速排序。在这样做时,我需要使用堆栈。在这种情况下使用堆栈与单独或双向链接列表有什么好处?

3 个答案:

答案 0 :(得分:2)

简单的回答是表达力。正如在注释中指出的那样,您可以使用链表实现堆栈。关于"使用堆栈"的好处是你不必担心实施的细节。也就是说,如果您刚刚使用了链接列表,那么您可以使用以下内容:

// push onto the stack
newNode = createStackNode(myData);
newNode.Next = root;
root = newNode;

// pop from stack
poppedNode = root;
root = root.Next;
myData = poppedNode.data;

如果您使用现有的Stack数据结构,那么您不必担心推送和弹出的细节。你要写的只有:

theStack.push(myData);

myData = theStack.pop();

重点是您知道Stack数据结构有效。拨打pushpop的电话真的很难。 非常容易搞砸了添加内容并从链接列表的头部删除内容的代码。

答案 1 :(得分:0)

堆栈是一个接口,它定义了一组应该定义的操作,它可以通过链接列表,双链表,数组等多种方式实现(如果需要,也可以使用队列,即使我不建议这样做)。这组操作的定义限制了数据结构的范围,允许为特定用例获得更好的性能。

一般来说,要从链接列表或数组中删除元素需要O(n),因为要删除的元素可以处于任何位置,因此您必须先找到它。在堆栈中,使用相同的数据结构实现pop,您可以实现O(1),因为您已经知道要删除的元素在哪里(如果链接列表和最后一个元素,则它是头部如果是数组)。

答案 2 :(得分:-1)

Push具有O(1)并且Pop在堆栈中具有O(1)时间复杂度,而Inserting可能具有O(N)(如果添加到头部,则最好的情况发生,O(1))并且搜索具有O( N)在linkedList中。由于您需要执行添加和反向操作,因此使用LinkedList

会更昂贵