2 qq 30151545 qq_30151545 于 2016.01.27 14:25 提问

java中++a和a++ 在数组实现栈中的小疑问

package 数组实现栈;

public class StackArray implements Stack {
public static final int num = 1024;//数组默认容量
public int capacity;//数组实际容量
public Object s[];//对象数组
public int top = -1;//栈顶元素位置

//构建默认容量栈对象
public StackArray() {
    this(num);
}

//构建指定容量栈对象
public StackArray(int a) {
    capacity = a;
    s = new Object[capacity];
}

//获取栈当前容量
public int getSize() {  
    return(top+1);
}

//判断栈是否为空
public boolean isEmpty() {
    return(top<0);
}

//入栈
public void push(Object obj) throws ExceptionStackFull {
    if(getSize() == capacity) {
        throw new ExceptionStackFull("栈溢出");
    }
    else {
        s[++top] = obj;             // ?????????????  想问下top++为什么不行
    }
}

//取栈顶元素
public Object top() throws ExceptionStackEmpty {
    if(isEmpty()) {
        throw new ExceptionStackEmpty("栈空");
    }
    else {
        return s[top];
    }
}

//出栈
public Object pop() throws ExceptionStackEmpty {
    if(isEmpty()) {
        throw new ExceptionStackEmpty("栈空");
    }
    else {
        Object a = s[top];
        s[top--] = null;           //????????????  出栈时不是把s[top]赋空值吗 怎么是s[top--]
        return a;
    }
}

}

我在用这栈来实现倒置时前面只能是++top 和 top-- 否则出现数组越界
倒置的代码如下
package 数组实现栈;

public class daozhi {
public static void main(String[] args) {
Integer b[] = { 1, 2, 3, 4, 5 };
reverse(b);

    for (int i = 0; i < b.length; i++) {
        System.out.println(b[i]);
    }

}

// 实现数组倒置
public static Integer[] reverse(Integer a[]) {
    StackArray s = new StackArray(a.length);
    // Integer n[] = new Integer[a.length];
    for (int i = 0; i < a.length; i++) {
        s.push(a[i]);
    }
    for (int i = 0; i < a.length; i++) {
        a[i] = (Integer) s.pop();
    }
    return a;
}

}

4个回答

chen956
chen956   2016.01.27 16:23
已采纳

top++是先取s[top]的值,top再加一,如果使用这个,top一开始是-1,我看上面也没有判断top是否是小于0,所以会出现数组越界

chen956
chen956 回复无清: 原理是一样的,s[top--]是先执行是s[top]=null,再执行top--。++/--在变量前在先执行++/--,若++/--在变量之后则先执行语句,在执行++/--
接近 2 年之前 回复
qq_30151545
qq_30151545 额谢谢 想问下面出栈为什么是s[top--] 不是s[top]
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.27 18:50

说明没有走到 s[++top] = obj;这个分支,走到的话,肯定是执行的。

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2016.01.27 20:23

s[top--]是两步合成了,先出战,然后指针减少1

91program
91program   Ds   Rxr 2016.01.27 16:29

++/-- 运算符的运行规则是先执行语句,再执行++/--,即 加一/减一的动作。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!