[英]Dynamic Stack : Java
誰能解釋,為什么“ tos”變量的值會像堆棧跟蹤中顯示的那樣變化?
以下是DynamicStack.java的代碼:
public class DynamicStack{
private int stck[];
int tos;
DynamicStack(int size){
stck = new int[size];
tos = -1;
}
// Following push method implements growable stack.
public void push(int item){
if(tos == stck.length-1){
int temp[] = new int[2*stck.length];
for(int i=0; i < stck.length; i++) temp[i] = stck[i];
stck = temp;
stck[++tos] = item;
}
else
stck[++tos] = item;
}
public int pop(){
if(tos < 0) {
System.out.println("Stack underflow");
return 0;
} else return stck[tos--];
}}
以下是Test_Dynamic_Stack.java的代碼:
public class Test_Dynamic_Stack{
public static void main(String a[]){
DynamicStack mystack1 = new DynamicStack(5);
DynamicStack mystack2 = new DynamicStack(8);
for(int i=0;i<7;i++) mystack1.push(i);
for(int i=10;i<20;i++) mystack2.push(i);
System.out.println("In mystack1");
for(int i=0; i<7; i++) {
System.out.println("Mystack1: "+mystack1.pop());
System.out.println("Mystack2: tos = "+mystack1.tos);
}
System.out.println("In mystack2");
for(int i=0; i<10; i++) {
System.out.println("Mystack2: "+mystack2.pop());
System.out.println("Mystack2: tos = "+mystack2.tos);
}
}
}
以下是堆棧跟蹤:
In mystack1 Mystack1: 6 Mystack2: tos = 5 Mystack1: 5 Mystack2: tos = 4 Mystack1: 4 Mystack2: tos = 3 Mystack1: 3 Mystack2: tos = 2 Mystack1: 2 Mystack2: tos = 1 Mystack1: 1 Mystack2: tos = 0 Mystack1: 0 Mystack2: tos = -1 In mystack2 Mystack2: 19 Mystack2: tos = 8 Mystack2: 18 Mystack2: tos = 7 Mystack2: 17 Mystack2: tos = 6 Mystack2: 16 Mystack2: tos = 5 Mystack2: 15 Mystack2: tos = 4 Mystack2: 14 Mystack2: tos = 3 Mystack2: 13 Mystack2: tos = 2 Mystack2: 12 Mystack2: tos = 1 Mystack2: 11 Mystack2: tos = 0 Mystack2: 10 Mystack2: tos = -1
最后,得到了輸出.. :)
嘗試改變
for(int i=10;i<20;i++) mystack2.push(i);
到for(int i=0;i<20;i++) mystack2.push(i);
在您的代碼中,您僅推送了十個元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.