详细的代码可见github:
https://github.com/AbitGo/myClassWork/tree/master/workspace_ds
栈一般分为顺序栈以及链栈,本文主要讲述顺序栈。
所需要实现的接口功能。
package com.company.ch3.Stack;
public interface IStack {
public void clear();
public boolean isEmpty();
public int length();
public Object peek();
public boolean push(Object x)throws Exception;
public Object pop();
}
顺序栈的主要实现:
package com.company.ch3.Stack.SqStack;
import com.company.ch3.Stack.IStack;
public class SqStack implements IStack {
private Object[] stackElem;
//在非空栈中,top始终指向栈顶元素的下一个存储位置(我的理解就是座标
//当栈空的时候,top的值为空
private int top;
private int maxSize=100;
public SqStack(int Size){
//创建新的栈,并且为空
top = 0;
maxSize = Size;
stackElem = new Object[maxSize];
}
public SqStack(){
//创建新的栈,并且为空
top = 0;
stackElem = new Object[maxSize];
}
@Override
public void clear() {
//直接将
this.top = 0;
}
@Override
public boolean isEmpty() {
return this.top==0;
}
@Override
public int length() {
return this.top;
}
@Override
public Object peek() {
//获取栈顶元素
if(!isEmpty()){
return stackElem[top];
}else{
return null;
}
}
@Override
public boolean push(Object x) throws Exception {
if(top>=this.maxSize){
return false;
}else
{
//将元素压如栈中
stackElem[++top]=x;
return true;
}
}
@Override
public Object pop() {
//将栈顶的元素弹出
if(!isEmpty()){
return stackElem[top--];
}else
return null;
}
}
测试类:
package com.company.ch3.Stack.SqStack;
public class SqStackTest {
public static void main(String[] args) throws Exception {
SqStack sqStack = new SqStack(20);
System.out.println("----------插入操作:开始----------");
sqStack.push(1);
sqStack.push(2);
sqStack.push(3);
sqStack.push(4);
sqStack.push(5);
System.out.println("----------插入操作:结束----------");
System.out.println("----------查看栈顶操作:开始----------");
System.out.println(sqStack.peek());
System.out.println("弹出栈顶元素:"+sqStack.pop());
System.out.println(sqStack.peek());
System.out.println("弹出栈顶元素:"+sqStack.pop());
System.out.println("----------查看栈顶操作:结束----------");
System.out.println("----------查看栈长度操作:开始----------");
System.out.println("长度为:"+sqStack.length());
System.out.println("----------查看栈长度操作:结束----------");
System.out.println("----------清除栈操作:开始----------");
sqStack.clear();
System.out.println("----------清除栈操作:结束----------");
}
}
测试结果:
----------插入操作:开始----------
----------插入操作:结束----------
----------查看栈顶操作:开始----------
5
弹出栈顶元素:5
4
弹出栈顶元素:4
----------查看栈顶操作:结束----------
----------查看栈长度操作:开始----------
长度为:3
----------查看栈长度操作:结束----------
----------清除栈操作:开始----------
----------清除栈操作:结束----------