跟着样子自己写一个栈
package demoStack;
import java.util.Arrays;
public class Stack {
private int size ; //数组的大小
private int top ; //头部指针
private char [] stackArray ; //模拟栈的数组
public Stack(int size) {
super();
this.size =size ;
stackArray = new char[size];
this.top = -1 ; ////初始化栈的时候由于栈内没有元素,栈顶下标设为-1
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack stack = new Stack(4);
System.out.println("栈是否为空:"+stack.empty());
stack.push('a');
stack.push('b');
stack.push('c');
stack.push('d');
stack.push('e');
char peek = stack.peek();
System.out.println("栈顶的元素是:"+peek);
char pop = stack.pop();
System.out.println("出栈的元素是"+pop);
int search = stack.search('b');
System.out.println("b的位置下标是:"+search);
stack.traverse();
}
//测试堆栈是否为空。
public boolean empty() {
return (top==-1)? true :false ;
}
//查看堆栈顶部的对象,但不从堆栈中移除它
public char peek(){
return stackArray[top];
}
//移除堆栈顶部的对象,并作为此函数的值返回该对象。
public char pop() {
if(empty()) {
System.out.println("Stack is Empty");
return 0;
}
return stackArray[top--];
}
public void doubleStack() {
char [] newStackArray = new char [size*2] ;
for(int i=0;i<size;i++) {
newStackArray[i] = stackArray[i];
}
size = size * 2;
stackArray = newStackArray ;
}
//把项压入堆栈顶部。
public void push(char ch) {
if(top ==size-1) { //栈已满了,需要扩容
doubleStack();
}
stackArray[++top] = ch;
}
//返回对象在堆栈中的位置,以 1 为基数
public void traverse() {
System.out.println("遍历栈里的元素");
for(int i=top;i>=0;i--) {
System.out.println(stackArray[i]);
}
}
public int search(char ch) {
for(int i=0;i<=top;i++) {
if( ch == stackArray[i]) {
return i;
}
}
return -1;
}
}