栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。
进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。
package www.bittech;
public interface IMyStack {
// 将 item 压入栈中
void push(int item);
// 返回栈顶元素,并且出栈
int pop();
// 返回栈顶元素,但不出栈
int peek();
// 判断这个栈是否为空栈
boolean empty();
// 返回元素个数
int size();
}
public class MyStacklmpl implements IMyStack {
//top所指向位置为存放数据元素的下标
private int[] elem;//存放数据的数组
private int top;//栈顶
private int usedSize;
public MyStacklmpl(int size){
this.elem=new int[size];
this.top=0;
this.usedSize=0;
}
//判断栈是否是满的
private boolean isFull(){
return this.top==this.elem.length;
}
@Override
public void push(int item) {
if(isFull()){
throw new UnsupportedOperationException("栈满了");
}
this.elem[this.top++]=item;
this.usedSize++;
}
@Override
public int pop() {
if(empty()){
throw new UnsupportedOperationException("栈空了");
}
this.top--;
this.usedSize--;
return this.elem[this.top];
}
@Override
public int peek() {
if(empty()){
throw new UnsupportedOperationException("栈空了");
}
return this.elem[this.top-1];
}
//判断栈是否为空
@Override
public boolean empty() {
return this.usedSize==0;
}
//得到栈的长度
@Override
public int size() {
return this.usedSize;
}