【Java】设计数据结构SetOfStacks, 由多个栈组成,并且在前一个栈填满时新建一个栈(未完)

原创 2015年07月10日 14:52:27

设想有一堆盘子,堆太高可能会倒下来。因此,现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请事先设计数据结构SetOfStacks, 模拟这种行为。

SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push() 和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,

pop()返回的值,应该跟只有一个栈时的情况一样)。

import java.util.Stack;


public class SetOfStacks {
	class stack {
		public void push(int v);
		public int pop();
	}
	
	//push and pop are both operated from the last stack, just pay attention if the last stack is empty or full
	public void push(int value) {
		Stack<E> last = getLastStack();
		if(last != null && !last.isFull()) {
			last.push(value);
		}
		else {
			Stack stack = new Stack(capacity);
			stack.push(value);
			stacks.add(stack);
		}
	}
	
	public int pop() {
		Stack last = getLastStack();
		int v = last.pop();
		if (last.size == 0 ) {
			stacks.remove(stacks.size() -1);
		}
		return -1;
	}
}


进阶:实现一个popAt(int index)方法,根据指定的子栈,进行pop操作。从栈1弹出元素时,我们需要移除栈2的栈底元素,并将其推到栈1中;随后,将栈3的栈底元素推入栈2,将栈4的元素推入栈3,以此类推

C/C++ 数据结构之 栈的创建

顺序栈#include "stdafx.h" #include using namespace std; typedef int SElemType;typedef struct{ SElem...
  • what951006
  • what951006
  • 2016年11月08日 03:03
  • 1293

17.定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数? 截止到目前 ,我还不知道iterator也可以在stack中用,今天算是受教了,感觉自己的基础知识很不扎实,看来是时候看看...
  • hsj1213522415
  • hsj1213522415
  • 2017年05月11日 19:36
  • 187

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。o(1)空间的代码实现

2.设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 参考了http://blog...
  • lihappy999
  • lihappy999
  • 2012年02月26日 20:06
  • 4168

两个栈共享同一存储空间

#include using namespace std; const int StackSize = 100; class BothStack { private: int data...
  • u010951938
  • u010951938
  • 2014年09月21日 22:04
  • 1032

设计包含min函数的栈(2)

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。   #include #include using namespa...
  • Allendale
  • Allendale
  • 2013年04月28日 19:48
  • 460

数据结构--一个数组实现两个栈

用一个数组实现两个栈,通常我们会想到以下几种方案: 1.奇偶栈,即就是将数组的偶数位置看作一个栈的存储空间,将奇数位置看作另一个栈的存储空间。 2.从中间分别向两边展开,即就是将数组的中间位置看作...
  • qq_29503203
  • qq_29503203
  • 2016年10月03日 06:17
  • 972

数据结构与算法之——两栈共享存储空间

其实栈的顺序存储很方便,因为它只在表尾进行操作,不存在普通线性表插入与删除还需要移动元素的情况。同样它也有普通线性表的缺陷,即必须确定数量。然而对于两个相同类型的栈,却可以做到最大限度地利用其开辟的存...
  • mylovepan
  • mylovepan
  • 2014年02月12日 09:21
  • 3792

如何用两个栈形成一个队列

了解栈和队列的结构特性: 栈:栈结构类似洗衣服往滚筒里装衣服,一件一件往筒里装,先放进去的衣服取得时候最后才能取出来,栈结构内的元素遵循FILO原则(先进后出),需要一个指针来控制最后入栈的元素即可...
  • ycz19930423
  • ycz19930423
  • 2016年08月26日 11:59
  • 564

C++算法之 两个队列实现一个栈

题目:用两个队列实现一个栈 算法思路: 现有两个队列q1与q2,入栈:如果q1与q2都为空,那么我们选择q1入栈也就是入队列,比如q1入栈 1 2 3 4 ;现在要出栈,后进先出那么4要出栈。但是...
  • djb100316878
  • djb100316878
  • 2014年12月09日 10:48
  • 9883

两个栈来实现一个队列的C++代码(某公司社会早笔试题)

利用两个栈来实现一个队列, 这个问题很常见。  最关键的是要有好的思路, 至于实现, 那是很简单的事情了。 在本文中, 也想说说自己的思路, 但是, 我觉得用代码来表述思路更符合我的习惯, 也是我的菜...
  • stpeace
  • stpeace
  • 2015年07月05日 23:35
  • 3975
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java】设计数据结构SetOfStacks, 由多个栈组成,并且在前一个栈填满时新建一个栈(未完)
举报原因:
原因补充:

(最多只允许输入30个字)