gpt4 book ai didi

java - 为什么构造函数中的初始化是-1而不是0等其他数字?在数组中实现两个堆栈

转载 作者:行者123 更新时间:2023-11-30 06:53:34 27 4
gpt4 key购买 nike

我正在查看在数组中实现两个堆栈的示例代码。初始化中有一部分我不明白。为什么将top1初始化为-1而不是0;为什么将 top2 作为 size 而不是 size-1?

这是代码:

public class StackArray {
int size;
int top1, top2;
int arr[];

public StackArray(int n){
size = n;
arr = new int[n];
top1 = -1;
top2 = size;
}
public void push1(int x){
if(top1<top2-1){
top1++;
arr[top1] = x;

}

else{
System.out.println("There is a stack overflow ");
}
}

public void push2(int x){
if (top1<top2-1){
top2--;
arr[top2] = x;


}
else{
System.out.println("There is a stackoverflow");
}
}

public int pop1(){
if(top1>=0){
int x = arr[top1];
top1--;
return x;
}
else{
System.out.println(size);
System.out.println("There is a stack underflow");
}
return -1;
}

public int pop2(){
if (top2<size){
int x = arr[top2];
top2++;
return x;
}
else{
System.out.println("There is a stack underflow");
}
return -1;
}



}

最佳答案

看起来这个类实现了两个堆栈,通过将元素压入数组的两端来实现。

当构造函数被调用时,堆栈是空的,因此两个堆栈的头部指向数组有效范围之外的索引是有意义的 - 一端为 -1 且数组的长度(arr.length) 在另一端。

当您将第一个元素推送到第一个堆栈 (push1) 时,top1 会递增到 0,并且该元素会添加到数组的第一个索引。

当您将第一个元素插入第二个堆栈 (push2) 时,top2 将递减为 arr.length - 1 并且该元素添加到数组的最后一个索引。

例如,假设数组的长度为 7。

首先,当堆栈为空时,head1head2 指向数组外部的位置:

    ------------------------------------
| | | | | | | |
------------------------------------
-1 0 1 2 3 4 5 6 7
head1 head2

当调用push1(5)时,head1会递增:

    ------------------------------------
| 5 | | | | | | |
------------------------------------
-1 0 1 2 3 4 5 6 7
head1 head2

调用push2(34)后,head2递减:

    ------------------------------------
| 5 | | | | | | 34 |
------------------------------------
-1 0 1 2 3 4 5 6 7
head1 head2

关于java - 为什么构造函数中的初始化是-1而不是0等其他数字?在数组中实现两个堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42242814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com