gpt4 book ai didi

java - 用一个数组实现三个Stack

转载 作者:搜寻专家 更新时间:2023-11-01 03:13:50 25 4
gpt4 key购买 nike

我看到下面的 Java 代码用于在单个数组上实现三个堆栈。

1 int stackSize = 300;
2 int indexUsed = 0;
3 int[] stackPointer = {-1,-1,-1};
4 StackNode[] buffer = new StackNode[stackSize * 3];
5 void push(int stackNum, int value) {
6 int lastIndex = stackPointer[stackNum];
7 stackPointer[stackNum] = indexUsed;
8 indexUsed++;
9 buffer[stackPointer[stackNum]]=new StackNode(lastIndex,value);
10 }
11 int pop(int stackNum) {
12 int value = buffer[stackPointer[stackNum]].value;
13 int lastIndex = stackPointer[stackNum];
14 stackPointer[stackNum] = buffer[stackPointer[stackNum]].previous;
15 buffer[lastIndex] = null;
16 indexUsed--;
17 return value;
18 }
19 int peek(int stack) { return buffer[stackPointer[stack]].value; }
20 boolean isEmpty(int stackNum) { return stackPointer[stackNum] == -1; }
21
22 class StackNode {
23 public int previous;
24 public int value;
25 public StackNode(int p, int v){
26 value = v;
27 previous = p;
28 }
29 }

我的问题1是第4行已经为变量buffer分配了内存。为什么在第9行,我们还需要分配新的StackNode。

我的问题2是:pop这个函数可以帮助回收使用过的内存吗?

例如,

Stack1_E1 => Stack1_E2 => Stack2_E1 => Stack2_E2 => Stack3_E1

当我们调用 pop(0)//弹出 Stack1根据我的理解,Stack1_E2使用的空闲空间在下次调用push时不会被重复使用。

函数 pop 是否设计正确?谢谢

注:本题已修改,包含pop函数。

最佳答案

Question 1: Line 4 has allocated memory for the variable buffer. Why in Line 9, we still need to allocate new StackNode.

第 4 行创建一个 引用StackNode 对象的数组。然后在第 9 行创建实际的 StackNode 对象。

Question 2: Can the function pop help recollect the used memory?

pop函数从栈中获取下一个值对象(StackNode.value),并在数组中设置相应的StackNode引用为 null。此 StackNode 使用的内存将被垃圾收集,因为 StackNode 不再被引用。当对象不再使用(即不再被调用者或其他对象引用)时,值对象本身使用的内存将被垃圾回收

关于java - 用一个数组实现三个Stack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4239292/

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