`

一个数组实现两个栈

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

相关推荐

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

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

    使用一个数组实现三个栈的数据结构

    这样,即使在一个栈满时,其他两个栈仍然可以继续push元素,只要数组总容量尚未耗尽。 在C#中,可以创建一个类来表示这个数据结构,包含三个栈对象,每个栈对象都维护其在数组中的起始位置和当前栈顶位置。以下是一...

    利用数组实现双端栈,插入,删除

    总之,数组实现的双端栈是一个强大且灵活的数据结构,能够满足多种算法和系统设计的需求。通过理解其内部机制和操作流程,我们可以更好地利用它来解决实际问题。在`doublestack.cpp`中,我们可以通过阅读代码来...

    栈的数组实现

    在数组实现栈时,我们可以定义一个数组来保存栈中的元素,并维护两个变量:一个表示栈顶元素的索引(top),另一个表示栈的容量(capacity)。当元素入栈(push)时,我们将元素添加到top指向的位置,并更新top;当...

    基于动态数组的栈

    使用动态数组实现栈 以下是一个简单的动态数组栈实现: ```cpp #include class MyStack { private: int* arr; // 动态数组 int capacity; // 当前容量 int size; // 当前元素个数 public: // 构造函数 ...

    Java数据结构篇-链表与数组实现栈.pptx.pptx

    2. 数组实现栈: - **数组栈定义**:数组栈是基于固定大小数组的栈,通过调整数组下标来模拟栈顶元素的增加和减少。 - **数组栈操作**:数组栈的入栈是在数组的末尾添加元素,而出栈则是从数组末尾移除元素,同时...

    循环数组实现队列

    循环数组实现队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列的操作受限制,和栈一样,它是一种操作受限制的线性表。进行插入操作的...

    用数组栈实现表达式求值(数据结构)(自制)

    - 遇到运算符时,弹出栈顶的两个操作数进行运算,然后将结果压回栈中。 - 继续遍历,直到表达式结束,栈中剩下的就是最终结果。 在“sharlon123”的这个自制程序中,可能实现了以上过程,但请注意,由于程序不...

    数组模拟栈.rar

    数组模拟栈是计算机科学中数据结构的一个基础概念,主要用于实现后进先出(LIFO)的数据访问模式。在本资源“数组模拟栈.rar”中,包含的代码是用C语言实现的,它允许我们理解如何利用数组来创建一个功能完备的栈。 ...

    两个栈空间共享,栈满打印

    标题中的“两个栈空间共享,栈满打印”指的是在C++编程中实现一个特殊的栈结构,其中两个栈共享同一个内存空间。这个结构可以用于存储整数序列中的奇数和偶数,当任一栈达到其最大容量(即“栈满”状态)时,程序会...

    栈关于数组与链表的实现

    若栈的大小超过预先设定的容量,需要重新分配内存,这是一个耗时的操作,且可能导致栈的中断(称为栈溢出)。 3. **扩容策略**:一种常见的扩容策略是动态扩容,当栈满时,创建一个新的更大容量的数组,然后将旧数组...

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

    1. 初始化:首先定义一个数组,并设置两个指针,`front`表示队首,`rear`表示队尾。 2. 入队:当队列未满时,将元素添加到`rear`位置,然后`rear`加一。 3. 出队:当队列非空时,删除`front`位置的元素,并将`front`...

    易语言数组实现环形队列、栈等

    在易语言中,使用数组实现栈非常直观,只需要一个变量来记录栈顶位置即可。当元素压栈时,栈顶位置加一并将新元素存入对应数组位置;当元素弹栈时,栈顶位置减一并返回该位置的元素。栈在递归、函数调用、表达式求值...

    用数组实现后缀表达式的算法

    根据给定的部分代码,可以看到该实现主要依赖于两个栈:一个用于存储操作数(`a[10]`), 另一个用于存储操作符(`b[10]`)。这些栈的实现都基于数组,并通过计数器来跟踪栈顶位置。此外,还定义了一系列函数来管理栈的...

    链表-使用Python基于链表实现数组栈.zip

    因此,题目中提到的“链表-使用Python基于链表实现数组栈”就是将栈的特性与链表的高效插入和删除结合,创建一个更高效的栈数据结构。 为了实现基于链表的数组栈,我们需要定义一个Stack类,包含head(栈顶)属性和...

    用数组和链表实现栈.zip

    在链表栈中,我们将最后一个节点视为栈顶,每当有新元素入栈,就创建一个新的节点,将元素存入其中,并将其指针链接到当前栈顶节点;出栈时,只需改变栈顶指针,指向下一个节点,然后释放原栈顶节点。 对比数组和...

    队列数组实现

    本文将详细介绍如何使用C++通过数组实现队列,并提供一个简单的示例程序。 #### 队列的基本概念 队列是一种线性数据结构,与栈不同的是,队列中的元素按照它们加入队列的顺序进行操作。队列有两个主要的操作:入队...

    c++ 定义一个字符栈类Stack(包括类的实现)。数据成员包括一个存放字符的数组stck[ ]和一个栈指针tos。栈.pdf

    这个类包含两个主要的数据成员:一个字符数组`stck[]`用于存储栈中的元素,以及一个栈指针`tos`(top of stack),用于记录栈顶元素的位置。 首先,我们定义了一个常量`SIZE`,它的值为27,代表栈的最大容量。这...

    基于数组来实现的顺序栈和基于链表来实现的链式栈

    数组实现的顺序栈在访问效率上有优势,但可能受限于固定容量;而链表实现的链式栈虽然在空间上有一定开销,但能提供更灵活的大小调整。在编程实践中,根据具体需求和性能指标来选择合适的数据结构是非常重要的。

Global site tag (gtag.js) - Google Analytics