`
dugu108
  • 浏览: 23303 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

栈内元素排序

 
阅读更多

分别是利用一个辅助栈和两个辅助栈

public class StackSort {
	public static void sortWithOneCache(Stack<Integer> stack) {
		if (stack == null || stack.isEmpty()) {
			return;
		}
		Stack<Integer> cache = new Stack<Integer>();

		while (!stack.isEmpty()) {
			int tmp = stack.pop();
			while (!cache.isEmpty() && tmp < cache.peek()) {
				stack.push(cache.pop());
			}
			cache.push(tmp);
		}

		while (!cache.isEmpty()) {
			stack.push(cache.pop());
		}
	}

	public static void sortWithTwoCache(Stack<Integer> stack) {
		if (stack == null || stack.isEmpty()) {
			return;
		}
		Stack<Integer> cache1 = new Stack<Integer>();
		Stack<Integer> cache2 = new Stack<Integer>();

		while (!stack.isEmpty()) {
			int tmp = stack.pop();
			while (!cache1.isEmpty() && tmp < cache1.peek()) {
				cache2.push(cache1.pop());
			}
			cache1.push(tmp);
			while (!cache2.isEmpty()) {
				cache1.push(cache2.pop());
			}
		}

		while (!cache1.isEmpty()) {
			stack.push(cache1.pop());
		}
	}
}

 

 

分享到:
评论

相关推荐

    设计一个算法,将一个栈中的元素排序

    设计一个算法,将一个栈中的元素排序,要求最多使用一个辅助栈及少量变量,并分析算法的时间性能。

    C++使用一个栈实现另一个栈的排序算法示例

    一个栈中元素类型为整型,现在想将该栈从顶到底按从小到大的顺序排序,只许申请一个辅助栈。 除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序? 算法C++代码: class Solution { public: //...

    数据结构实验(线性表、栈、队列)

    (1)创建一个顺序表,存放在数组 A[N]中,元素的类型为整型,设计算法调整 A,使其左边的所有元素小于 0,右边的所有元素大于 0(要求算法的时间复杂度和空 间复杂度均为 O(n))。 (2)建立一个循环单链表,其节点...

    顺序栈的实现,数据结构中的坚实支柱!.zip

    顺序栈的高级功能包括动态调整栈容量、栈元素访问、栈元素遍历和栈元素排序。这些功能可以进一步提高栈的灵活性和实用性,使其能够满足更复杂的实际需求。 使用顺序栈非常简单。首先,需要创建一个顺序栈对象,并为...

    算法设计-实验六-栈.docx

    该文档涵盖了栈的基本概念,包括创建栈、压入和弹出栈元素以及栈的应用等。此外,该文档还包括了一个逐步指南,介绍如何在Python中创建栈类,包括代码示例和实现细节。 本文档中的实验练习提供了创建和操作栈的实践...

    数据结构C严蔚敏版_全注释源码_线性表队列栈监视哨查找折半直接插入排序冒泡快速选择

    //栈元素e InitStack(S); //构造空栈S cout请输入非负十进制整数N (N&gt;=0)"; scanf("%d",&N); //获取用户的输入,%d 是对数据的格式化。 &N 表示对变量 N 引用。 while (N) //只要n不等于0就循环。从n为...

    数据结构实验6-栈

    5)获取栈顶元素 GetTop( ) 6)遍历顺序表 OutStack( ) 7)置空顺序表 setEmpty( ) 8)判断圆括号是否正确配对 Judgepair( ) 9)判断结果输出 Judgeout(int a) //顺序存储结构 #define MAXNUM 20 #define ElemType ...

    二叉检索树及用最大堆实现的栈的代码

    每个栈元素在压栈的时候可以附加一个时间标签(时间标签是一个从0到max的值,下一个元素在压栈的时候,则这个元素的时间标签值要大于上一个压栈的元素时间标签值)。 重写push、pop、getTop等栈数据类型所需要的操作...

    程序员面试题精选100题

    我看到这道题目时,第一反应就是每次push 一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将 是最小元素。但由于不能保证最后push 进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈 了。 在栈里添加...

    数据结构实验报告 栈、队列和矩阵.doc

    用递归算法,将一个元素的子集进行重新反向排序,实现逆转字符串操作。 将每一个元素数的子集进行输出,再整体输出,以输出一个集合(n个元素)的所有子集。 四、实验原始纪录(源程序、数据结构等) import java....

    C语言实现堆排序、用栈实现表达式求值、B+树和红黑树

    在Linux环境下运用gedit工具,通过C语言编程实现四个程序,分别为:堆排序、用栈实现表达式求值、B+树和红黑树。 利用大顶堆(或小顶堆)堆顶记录的是最大关键字(或最小关键字)这一特性,使得每次从无序中选择...

    用C++实现一个链式栈的实例代码

    本篇文章是对使用C++实现一个链式栈的代码进行了详细的分析介绍,需要的朋友参考下

    数据结构--数据结构的组织方法.pdf

    数据结构--数据结构的组织⽅法 ⾯试题:常见的数据结构的优缺点?(数据结构+算法) 解答: 数据结构...使⽤栈计算后缀表达式 对栈的元素进⾏排序 判断表达式是否括号平衡 3、队列(先进先出): 队列也是⼀种特殊的线

    数组操作:创建、插入、排序、删除

    用结构体创建一个数组,对数组进行了基本的操作,包括数组的插入、删除、排序、求长度等

    数据结构与常见算法,从递归开始,排序,至链表,队列,栈,树,图等。.zip

    逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何...

    2022数据结构课设easyx实现顺序表,链式栈和无向图的算法的动态演示代码

    5、用户可以通过软件交互界面增加或删除元素,如:顺序表、链式栈和无 向/有向图中元素的增加与删除。 6、针对每一种数据结构绘制的图形,实现相关的 2-3 个算法并执行,在交 互界面中显示执行的过程与最终的结果,如...

    算法大全-面试题-链表-栈-二叉树-数据结构.docx

    算法大全-面试题-链表-栈-二叉树-数据结构.docx 一、单链表 目录 1.单链表反转 2.找出单链表的倒数第4个元素 3.找出单链表的中间元素 4.删除无头单链表的一个节点 5.两个不交叉的有序链表的合并 6.有个二级...

    动态栈.zip

    搜索算法:搜索算法用于在数据集中查找特定元素的算法。常见的搜索算法包括线性搜索、二分搜索等。 图算法:图算法用于处理图结构的数据,如最短路径算法(如Dijkstra算法、Floyd-Warshall算法)、最小生成树算法...

    静态栈.zip

    搜索算法:搜索算法用于在数据集中查找特定元素的算法。常见的搜索算法包括线性搜索、二分搜索等。 图算法:图算法用于处理图结构的数据,如最短路径算法(如Dijkstra算法、Floyd-Warshall算法)、最小生成树算法...

    用C语言实现堆、栈、B+树、红黑树

    (1)理解堆、栈、B+树、红黑树这四种数据结构的基本原理。 (2)用C语言实现这四种数据结构,并且每种数据结构至少完成一种其对应的功能。 (1)堆的性质 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于...

Global site tag (gtag.js) - Google Analytics