`

一个数组实现两个栈

阅读更多
用一个数组实现两个栈的大体思路:先定义一个数组,定义两个栈底指针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];
}
}
}
分享到:
评论

相关推荐

    一个一维数组实现两个栈的操作

    一个一维数组实现两个栈的操作,头尾开始,节省空间

    数据结构和算法必知必会的50个代码实现.zip

    【数据结构课程设计】 ... 用数组实现一个顺序栈 用链表实现一个链式栈 编程模拟实现一个浏览器的前进、后退功能 队列 用数组实现一个顺序队列 用链表实现一个链式队列 实现一个循环队列 ......

    队列的链表与数组分别实现

    队列关于数组与链表的实现, linux c语言

    函数、内存、一维数组、二维数组

    •需求:定义一个功能,可以实现两个整数的加法运算。 •分析: •该功能的运算结果是什么?两个数的和,也是一个整数(int) •在实现该功能的过程中是否有未知内容参与运算?加数和被加数是不确定的。(两个...

    LeetCode判断字符串是否循环-Queue_Stack:依赖数组实现栈,实现链式队列,实现循环队列,两个栈实现一个队列,两个队列实现一个栈

    依赖数组实现栈 定义一个数组,int型的top表示栈顶(表示当前可以插入元素的位置),usesize表示使用的栈的大小 栈的push和pop要注意top的移动,usesize的增加减小 3、栈的练习题之括号匹配 可以在leetcode上找到 ...

    java编程练习题

    3、实现在一个数组指定位置添加元素和删除元素的功能。 1、数组容量问题? 2、添加元素前后数组中元素的变化 3、删除元素前后数组中元素的变化 面向对象章节作业 1,写一个类,名为Animal,该类有两个私有属性, ...

    数据结构和算法必知必会的50个代码实现

    ## 栈* 用数组实现一个顺序栈* 用链表实现一个链式栈* 编程模拟实现一个浏览器的前进、后退功能 ## 队列* 用数组实现一个顺序队列* 用链表实现一个链式队列* 实现一个循环队列 ## 递归* 编程实现斐波那契数列求值f(n...

    实验4 数组(4学时)

    4、利用二维数组实现一个矩阵类:Matrix。要求提供以下操作:(1)set(int row, int col, double value):将第row行第col列的元素赋值为value;(2)get(int row,int col):取第row行第col列的元素;(3)width...

    C语言实现栈空间共享代码

    这段代码是用C语言编写的,用于实现一个双栈结构,即在一个数组中存储两个栈,一个从数组头部开始,一个从数组尾部开始,以节省空间。代码的主要功能如下: 定义了一个判断函数judge(),用于检查是否栈满,即是否top...

    50个必会的数据结构及算法实现源码

    问题:用数组实现一个顺序栈 问题:用链表实现一个链式栈 队列 问题:用数组实现一个顺序队列 问题:用链表实现一个链式队列 问题:实现一个循环队列 递归 问题:编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2) ...

    用java实现的栈Stack类

    用java实现的栈Stack类,不继承任何集合类,用对象数组实现

    用两个栈实现队列(纯原创,亲测可行)

    队列的两种实现方式一种是数组一种是栈,此处介绍如何将用两个栈来实现一个队列

    C#(数据结构与教程)栈和队列的算法程序

    学过数据结构的人都知道:栈可以用两种方式来实现,一种方法是用数组实现栈,这种栈成为静态栈;另外一种方法是用链表实现栈,这种栈叫做动态栈。 栈中通常存放着程序的局部变量等。栈通常有出栈和入栈操作。

    C语言通过使用数据结构来实现双向顺序栈

    与常规栈不同,双向顺序栈具有两个栈顶位置,一个在栈的一端,称为"头栈顶"(head),另一个在栈的另一端,称为"尾栈顶"(tail)。 双向顺序栈可以使用数组来实现。可以将数组的一端作为栈的头部,并使用一个指针...

    PHP使用数组实现队列

    PHP中将数组当做一个栈,主要是使用array_push()和array_pop()两个系统函数来完成。入栈主要是利用array_push()函数向第一个参数的数组尾部添加一个或多个元素,然后返回新数组的长度,示例如下: 而PHP中,将数组...

    Python实现栈的方法详解【基于数组和单链表两种方法】

    本文实例讲述了Python实现栈的方法。分享给大家供大家参考,具体...注:一个完整的代码并不是使用一个py文件,而使用了多个文件通过继承方式实现。 1. 超类接口代码 arraycollection.py """ File: abstractcollection.

    C++实现动态数组功能

    1.线性表:数据存储像一条线一样的结构,每个线性表上的数据最多只有前和后的两个方向,如数组、链表、队列、栈等都是这种结构,所以实现的数组的动态操作,其他结构也可轻易的类似实现。更重要的是,在这之后看源码...

    数据结构第三章作业答案参考(C语言)

    9. 若用数组S[0..m]作为两个栈S1和S2的共同存储结构,对任何一个栈,只有当S全满时才不能作入栈操作。为这两个栈分配空间的最佳方案是( )。 A.S1的栈底位置为0,S2的栈底位置为m B.S1的栈底位置为0,S2的栈底...

    JavaScript数组的栈方法与队列方法详解

    栈中项的插入(push)和移除,只发生在一个位置——栈的顶部。ECMAScript为数组提供了push()和pop()方法,可以实现类似栈的行为。下面两图分别演示了入栈与出栈操作。 push()方法可以接收任意数据的参数,把它们...

    【03-流程控制与数组】

    数组引用变量是一个引用类型的变量,被存储在栈(stack)内存 中。 •如果堆内存中数组不再有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾 回收机制回收。因此,为了让...

Global site tag (gtag.js) - Google Analytics