import java.util.Stack;
public class MyQueue {
Stack s=new Stack();
public void enQueue(Object obj){
s.push(obj);
}
public void deQueue(){
for(int i=s.size();i>0;i--){
System.out.println(s.pop());
}
}
public static void main(String[] args){
MyQueue q=new MyQueue();
q.enQueue("a");
q.enQueue("b");
q.enQueue("c");
q.enQueue("d");
q.deQueue();
}
}是这样实现么,为什么deQueue中写成for(int i=0;i<s.size()-1;i--)就不对呢
for(int i=0;i<s.size()-1;i--) 这里是i从初始值0开始自减,第二次循环时i就是-1了,这样循环下去,i<s.size()-1这个for循环的执行条件永远成立,就是一死循环
这里每次执行for循环,循环体内的s.pop()执行后,s.size()都会减1,同时i又在自增,
也就是执行一次循环,i<s.size()-1,小于号左边自增,右边自减,执行次数到应该的执行次数的一半的时候就跳出循环了,显然有问题。
可以这样写for(int i=0;i<s.size();)
lz注意for(#1;#2;#3) {#4}的执行顺序是,#1 #2#4#3 #2#4#3 #2#4#3 ...
#1只执行一遍,#2执行多遍,所以s.size()的值的变化对写在#1的s.size()不影响,对写在#2的s.size()有影响
{
private static final int MAX_SIZE = 5;
private int[] t = new int[MAX_SIZE];
private int top = -1; public void push(int x) throws Exception{ if(isFull()){
throw new Exception("栈已满");
}else{
t[++top] = x;
}
}
public int pop() throws Exception{ if(isEmpty()){
throw new Exception("栈为空");
}else{
return t[top--];
}
} public boolean isFull(){
return top == MAX_SIZE - 1;
} public boolean isEmpty(){
return top == -1;
} public void printStack(){
for(int i = 0; i <= top; i++){
System.out.print(t[i]);
}
}
}public class Temp
{
public static void main(String[] args) throws Exception{
MyStack ms = new MyStack();
ms.push(1);
ms.push(2);
ms.push(3);
ms.push(4);
ms.push(5);
System.out.println(ms.pop());
//ms.push(6);
ms.printStack();
}
}