Stack的java代码 java stacktrace

用一维整数数组实现数据结构中的堆栈(Stack) 。(用java语言)public class IntStack {
private int[] stack;
private int top;
/**
*初始化栈Stack的java代码,传入一个非负Stack的java代码的整数,否则抛出一个错误
*/
public IntStack(int size) throws StackErrorException{
if(size0){
throw new StackErrorException("错误的大小");
}
init(size);
}
private void init(int size) {
stack = new int[size];
top = 0;
}
/**
*判断栈是否为空,true则为空,反之则反
*/
public boolean isEmpty(){
return top==0;
}
/**
*判断栈是否已满,true则已满,反之则反
*/
public boolean isFull(){
return top==stack.length;
}
/**
*向栈顶添加元素,满则抛出异常
*/
public void push(int value) throws StackErrorException{
if(isFull()){
throw new StackErrorException("栈已满");
}
stack[top++] = value;
}
/**
*移除栈顶元素并返回,空则抛出异常
*/
public int pop() throws StackErrorException{
if(isEmpty()){
throw new StackErrorException("已到栈底!");
}
return stack[--top];
}
/**
*返回栈顶元素 , 空则抛出异常
*/
public int peek() throws StackErrorException{
if(isEmpty()){
throw new StackErrorException("已在栈底!");
}
return stack[top-1];
}
/**
*返回栈大小
*/
public int size(){
return stack.length;
}
class StackErrorException extends Exception{
public StackErrorException(String msg) {
super(msg);
}
}
}
java里Stack类怎么用啊?如下示例代码
//Create the Stack instance and add a couple of elements to it
Stack stack = new Stack();
String s1 = "element 1";
String s2 = "element 2";
stack.push(s1);
stack.push(s2);
现在栈中有两个元素Stack的java代码,栈顶应该是element 2,Stack的java代码我们可以通过peek方法看栈顶Stack的java代码的元素Stack的java代码:
System.out.println(stack.peek());
输出:
element 2
要看element 1的位置需要使用search方法:
//Find position of a certain element
int pos = stack.search("element 1");
System.out.println(pos);
上面代码将输出:
2
要移除栈顶的元素应该用pop()方法:
System.out.println(stack.pop());
System.out.println(stack.pop());
输出:
element 2
element 1
在上一步中栈中的两个元素都被popStack的java代码了 , 现在我们看下empty()方法是否返回true
System.out.println(stack.empty());
输出:
true
java stack 问题else if((list[i].equals(new String("}")))(! stack.peek().equals(new String("{")))){
stack.peek挂了 。
你的判断有问题 , 第2个}stack已经empty了,你再调用stack.peek()就会挂,判断里的stack.peek().equals(new String 。。。这个方法要用之前得先判断stack是否为空 。给你改了下循环,后面的输出你看着改把,有问题发消息:
for(int i=0;istr.length();i++){
if((list[i].equals(new String("(")))||(list[i]).equals(new String("["))||(list[i].equals(new String("{"))))
stack.push(list[i]);
else if((list[i].equals(new String(")")))(stack.peek().equals(new String("(")))(! stack.isEmpty())){
stack.pop();
}
else if((list[i].equals(new String(")")))(! stack.isEmpty()) (! stack.peek().equals(new String("(")))){
System.out.println("左右括号匹配不正确!");
return;
}
else if((list[i].equals(new String("]")))(! stack.isEmpty()) (stack.peek().equals(new String("["))) ){
stack.pop();
}

推荐阅读