用一个数组实现两个栈的大体思路:先定义一个数组,定义两个栈底指针base1,和base2初始值分别为0和size -1;再定义一个标志位flag用来指示是对哪个栈进行操作,在base2 - base1 == 1时,栈满了,在入栈时左边指针++,右边指针--,出战相反。一下为具体代码,由于比较简单,就没写注释。
public class Stack {
private int stackSize = 10;
private int base1;
private int base2;
private Object [] obj = null;
public Stack(){
obj = new Object[stackSize];
base1 = 0;
base2 = stackSize -1;
}
public Stack(int maxSize){
obj = new Object[maxSize];
base1 = 0;
base2 = maxSize - 1;
}
public boolean isEmpty(int flag){
if(flag == 0){
return base1 == 0;
}else{
return base2 == obj.length -1;
}
}
public boolean isFull(){
return (base2 - base1) == 1;
}
public void push(Object o,int flag){
if(isFull()){
try {
throw new Exception("栈已满");
} catch (Exception e) {
e.printStackTrace();
}
return;
}
if(flag == 0){
obj[base1 ++] = o;
}else if(flag == 1){
obj[base2 --] = o;
}
}
public Object pop(int flag){
if(isEmpty(flag)){
try {
throw new Exception("栈空了");
} catch (Exception e) {
e.printStackTrace();
}
}
if(flag == 0){
return obj[--base1];
}else{
return obj[++base2];
}
}
}
分享到:
相关推荐
一个一维数组实现两个栈的操作,头尾开始,节省空间
【数据结构课程设计】 ... 用数组实现一个顺序栈 用链表实现一个链式栈 编程模拟实现一个浏览器的前进、后退功能 队列 用数组实现一个顺序队列 用链表实现一个链式队列 实现一个循环队列 ......
队列关于数组与链表的实现, linux c语言
•需求:定义一个功能,可以实现两个整数的加法运算。 •分析: •该功能的运算结果是什么?两个数的和,也是一个整数(int) •在实现该功能的过程中是否有未知内容参与运算?加数和被加数是不确定的。(两个...
依赖数组实现栈 定义一个数组,int型的top表示栈顶(表示当前可以插入元素的位置),usesize表示使用的栈的大小 栈的push和pop要注意top的移动,usesize的增加减小 3、栈的练习题之括号匹配 可以在leetcode上找到 ...
3、实现在一个数组指定位置添加元素和删除元素的功能。 1、数组容量问题? 2、添加元素前后数组中元素的变化 3、删除元素前后数组中元素的变化 面向对象章节作业 1,写一个类,名为Animal,该类有两个私有属性, ...
## 栈* 用数组实现一个顺序栈* 用链表实现一个链式栈* 编程模拟实现一个浏览器的前进、后退功能 ## 队列* 用数组实现一个顺序队列* 用链表实现一个链式队列* 实现一个循环队列 ## 递归* 编程实现斐波那契数列求值f(n...
4、利用二维数组实现一个矩阵类:Matrix。要求提供以下操作:(1)set(int row, int col, double value):将第row行第col列的元素赋值为value;(2)get(int row,int col):取第row行第col列的元素;(3)width...
这段代码是用C语言编写的,用于实现一个双栈结构,即在一个数组中存储两个栈,一个从数组头部开始,一个从数组尾部开始,以节省空间。代码的主要功能如下: 定义了一个判断函数judge(),用于检查是否栈满,即是否top...
问题:用数组实现一个顺序栈 问题:用链表实现一个链式栈 队列 问题:用数组实现一个顺序队列 问题:用链表实现一个链式队列 问题:实现一个循环队列 递归 问题:编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2) ...
用java实现的栈Stack类,不继承任何集合类,用对象数组实现
队列的两种实现方式一种是数组一种是栈,此处介绍如何将用两个栈来实现一个队列
学过数据结构的人都知道:栈可以用两种方式来实现,一种方法是用数组实现栈,这种栈成为静态栈;另外一种方法是用链表实现栈,这种栈叫做动态栈。 栈中通常存放着程序的局部变量等。栈通常有出栈和入栈操作。
与常规栈不同,双向顺序栈具有两个栈顶位置,一个在栈的一端,称为"头栈顶"(head),另一个在栈的另一端,称为"尾栈顶"(tail)。 双向顺序栈可以使用数组来实现。可以将数组的一端作为栈的头部,并使用一个指针...
PHP中将数组当做一个栈,主要是使用array_push()和array_pop()两个系统函数来完成。入栈主要是利用array_push()函数向第一个参数的数组尾部添加一个或多个元素,然后返回新数组的长度,示例如下: 而PHP中,将数组...
本文实例讲述了Python实现栈的方法。分享给大家供大家参考,具体...注:一个完整的代码并不是使用一个py文件,而使用了多个文件通过继承方式实现。 1. 超类接口代码 arraycollection.py """ File: abstractcollection.
1.线性表:数据存储像一条线一样的结构,每个线性表上的数据最多只有前和后的两个方向,如数组、链表、队列、栈等都是这种结构,所以实现的数组的动态操作,其他结构也可轻易的类似实现。更重要的是,在这之后看源码...
9. 若用数组S[0..m]作为两个栈S1和S2的共同存储结构,对任何一个栈,只有当S全满时才不能作入栈操作。为这两个栈分配空间的最佳方案是( )。 A.S1的栈底位置为0,S2的栈底位置为m B.S1的栈底位置为0,S2的栈底...
栈中项的插入(push)和移除,只发生在一个位置——栈的顶部。ECMAScript为数组提供了push()和pop()方法,可以实现类似栈的行为。下面两图分别演示了入栈与出栈操作。 push()方法可以接收任意数据的参数,把它们...
数组引用变量是一个引用类型的变量,被存储在栈(stack)内存 中。 •如果堆内存中数组不再有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾 回收机制回收。因此,为了让...