栈接口的定义
public interface stack {//栈的抽象接口定义
void push(Object obj);//向栈顶插入新元素
Object pop();//栈中删除元素并返回
Object peek();//返回栈顶的元素
boolean isEmpty();//判断是否为空
void clear();//清空栈中的元素
}
初始化顺序栈为空
public sequenceStack(){
top=-1;//栈的初始为空,置top为-1
stackArray=new Object[maxSize];//数组初始长度为10
}
public sequenceStack(int n){
if(n<=0){
System.out.println("数组长度要大于0,否则退出程序");
System.exit(1);
}
top=-1;
stackArray=new Object[n];//给数组长度为n的存储空间
}
向栈顶插入元素
public void push(Object obj) {//向栈顶插入元素
if(top==stackArray.length-1){//对数组空间用完情况进行再分配
Object[] p=new Object[top*2+2];//新数组空间变为原来的2倍
for(int i=0;i<=top;i++){
p[i]=stackArray[i];
}
stackArray=p;//把p指向的空间给stackArray
}
top++;//栈顶指针加1表示进栈
stackArray[top]=obj;//将新元素插入到栈顶
}
删除栈顶元素并返回
public Object pop() {
if(top==-1){//对栈为空时处理情况
System.out.println("数据栈已空,无法删除元素");
return null;
}
top--;//表示退栈
return stackArray[top+1];//返回栈顶元素的值
}
读取栈顶元素的值
public Object peek() {
if(top==-1){//空栈处理
System.out.println("数据栈已空,无法删除元素");
return null;
}
return stackArray[top];//返回栈顶元素的值
}
判断栈是否为空和清空所有元素使之为空栈
@Override
public boolean isEmpty() {//判断时否为空,如果为空返回ture,否则返回false
return top==-1;
}
@Override
public void clear() {//清除栈中所有元素
top=-1;
}
测试方法
public class stackTest {
public static void main(String[] args) {
stack sck=new sequenceStack();//定义并创建空栈
int []a=new int[]{3,8,5,17,9,30,15,22};
for(int i=0;i<a.length;i++){
sck.push(a[i]);//数组进栈
}
System.out.println(sck.pop()+","+sck.pop()+","+sck.pop());
sck.push(68);
System.out.println(sck.peek()+","+sck.pop()+","+sck.pop());
while(!sck.isEmpty()){
System.out.print(sck.pop()+" ");
}
System.out.println();
sck.clear();
}
}
你们最喜欢的全部代码来了
import java.util.Scanner;
public class sequenceStack implements stack{
final int maxSize=10;//假定存储栈的一维数组初始长度为10
private Object[]stackArray;//定义存储栈的数组引用
private int top;//定义数组中所保存栈的栈顶元素的下标位置
public sequenceStack(){
top=-1;//栈的初始为空,置top为-1
stackArray=new Object[maxSize];//数组初始长度为10
}
public sequenceStack(int n){
if(n<=0){
System.out.println("数组长度要大于0,否则退出程序");
System.exit(1);
}
top=-1;
stackArray=new Object[n];//给数组长度为n的存储空间
}
@Override
public void push(Object obj) {//向栈顶插入元素
if(top==stackArray.length-1){//对数组空间用完情况进行再分配
Object[] p=new Object[top*2+2];//新数组空间变为原来的2倍
for(int i=0;i<=top;i++){
p[i]=stackArray[i];
}
stackArray=p;//把p指向的空间给stackArray
}
top++;//栈顶指针加1表示进栈
stackArray[top]=obj;//将新元素插入到栈顶
}
@Override
public Object pop() {
if(top==-1){//对栈为空时处理情况
System.out.println("数据栈已空,无法删除元素");
return null;
}
top--;//表示退栈
return stackArray[top+1];//返回栈顶元素的值
}
@Override
public Object peek() {
if(top==-1){//空栈处理
System.out.println("数据栈已空,无法删除元素");
return null;
}
return stackArray[top];//返回栈顶元素的值
}
@Override
public boolean isEmpty() {//判断时否为空,如果为空返回ture,否则返回false
return top==-1;
}
@Override
public void clear() {//清除栈中所有元素
top=-1;
}
}