大门对厨房门的屏风图:JAVA堆栈问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 08:22:05
class Stack{
private int stck[]=new int[10];
private int tos;
Stack(){
tos=-1;
}
void push(int item){
if(tos==9)
System.out.println("Stack is full");
else
stck[++tos]=item;
}
int pop(){
if(tos<0){
System.out.println("Stack underflow");
return 0;
}
else
return stck[tos--];
}
}
数组里是十个元素吧,那么从-1到9不是超过10了吗?还有这段代码void push(int item){
if(tos==9)
System.out.println("Stack is full");
else
stck[++tos]=item;里的item是干什么的,请高手指点
class TestStack{
public static void main(String args[]){
Stack mystack1 = new Stack();
Stack mystack2 = new Stack();
for(int i=0;i<10;i++)mystack1.push(i);
for(int i=10;i<20;i++)mystack2.push(i);
System.out.println("出栈1");
for(int i=0;i<10;i++)
System.out.println(mystack1.pop());
System.out.println("出栈2");
for(int i=0;i<10;i++)
System.out.println(mystack2.pop());
}
}
for(int i=0;i<10;i++)mystack1.push(i);
for(int i=10;i<20;i++)mystack2.push(i);
这二句话是压栈吧,是不是先压后出,可我写System.out.println(mystack1.push(i));为什么报错,还有这个i就相当于item吧??

void push(int item),这个item是你压栈时需要放进栈的数据呀。stck[++tos]=item这句话就是把栈顶位置向上一个,然后把数据压栈的过程。如果没有item这个参数,那你把什么压栈呀?相反的pop弹栈过程是不需要参数的,因为弹出的数据是你栈顶的数据。

-1到9确实是超过10了,但是栈顶位置可以是-1,这代表栈是空的,当tos为0时,已经代表栈中有一个元素了。

没错啊,tos表示的是堆栈指针,当它取-1时是栈底,表示堆栈里没有任何元素,0开始是有元素了,9表示的是栈顶,所以当tos==9时是堆栈满了,item就是压入堆栈的元素啊。