java – 关于应用于堆栈和队列的排序算法
我想知道为什么我们总是使用排序算法(如插入排序或合并排序,…)仅用于列表和数组?为什么我们不将这些算法用于堆栈或队列?
解决方法
堆栈和队列是具有自己的顺序感的抽象数据类型,即堆栈的LIFO(后进先出)和队列的FIFO(先进先出).因此,采取队列/堆栈并重新排序其元素是没有意义的.
维基百科参考 > Stack (data structure) 在堆栈对传染媒介 您可能会注意到在Java中, 相关问题 > Java Stack class inherit Vector Class 在java.util.Stack上使用Collections.sort 尽管在堆栈上使用快速排序是没有意义的,但实际上你可以在java.util.Stack上使用 Stack<Integer> stack = new Stack<Integer>(); stack.push(1); stack.push(3); stack.push(5); stack.push(2); stack.push(4); Collections.sort(stack); // by virtue of design error!!! System.out.println(stack); // prints "[1,2,3,4,5]" while (!stack.isEmpty()) { System.out.println(stack.pop()); } // prints "5","4","3","2","1" 请注意,元素按降序打印:这是因为java.util.Stack的实现方式.它从Vector的末尾推送并弹出.你不需要知道这个;你不应该知道这一点;但这些都是事实. 使用适当的数据结构 根据您尝试完成的内容, NavigableSet<Integer> nums = new TreeSet<Integer>(); nums.add(5); nums.add(3); nums.add(1); nums.add(2); nums.add(6); System.out.println(nums.pollFirst()); // prints "1" System.out.println(nums.pollFirst()); // prints "2" nums.add(4); System.out.println(nums.pollFirst()); // prints "3" System.out.println(nums.pollFirst()); // prints "4" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |