栈的实现1(顺序栈)
基础知识:
1、在非空栈中,top指针始终指向栈顶元素的下一个位置
2、结点进栈:先将数据元素保存在栈顶(top所指的当前位置),然后执行top+1,时top指向栈顶的下一个位置
3、结点出栈:先执行top-1使top指向栈顶元素的存储位置,然后将栈顶元素取出
4、判栈空/满:(栈顶指针top 栈底指针base 栈的存储空间StackSize)
栈空:top==base 指针指向同一位置
栈满:top-base>=StackSize
5、出栈与取栈的区别:
出栈操作改变栈顶指针top的位置,取栈不需要改变
======================================================================
顺序栈
接口类IStack
public interface IStack<E> {
//初始化
public void init(int initsize);
//判栈空
public boolean isEmpty();
//判栈满
public boolean isFull();
//压栈(元素进栈)
public void push(E e);
//取栈顶元素
public Object getTop();
//弹栈(元素出栈)
public Object pop();
//找到指定位置的元素
public Object getindexdata(int index);
//遍历栈
public void print();
}
实现类Stack
public class Stack<E> implements IStack<E>{
public Object[] array; //顺序栈将数据存储在数组中
public int top;//栈顶指针
public int base=0;//栈底指针
public int maxsize;//最大容量
//初始化栈
//默认初始化栈
public void init(){
maxsize=20;
array=new Object[maxsize];
top=0;
}
public void init(int initsize) {
if(initsize>0){
array=new Object[initsize];
top=0;
maxsize=initsize;
}
}
//判栈空
public boolean isEmpty() {
//栈顶和栈底指针相等都指向栈底
return top==base?true:false;
}
//判栈满
public boolean isFull() {
//如果栈顶指针减去栈底指针>=数组的最大长度则位满
return top-base>=maxsize?true:false;
}
//压栈(元素进栈)
public void push(Object e) {
if(isFull()){
System.out.println("栈已满");
return;//中止
}else{
array[top]=e;
top++;
System.out.println(e+"加入成功,top现在指针位:"+top);
}
}
//得到栈顶元素(不用出栈)
public Object getTop() {
Object topdata=null;
if(isEmpty()){
System.out.println("栈空");
}else{
//取栈顶元素不需要改变指针位置
topdata=array[top-1];
}
return topdata;
}
//弹栈(元素出栈)
public Object pop() {
Object topdata=null;
if(isEmpty()){
System.out.println("栈空");
}else{
top--;
topdata=array[top];
System.out.println(topdata+"弹出栈,指针现在位置:"+top);
}
return topdata;
}
//找到指定位置的元素
public Object getindexdata(int index){
Object indexdata=null;
if(index>top){
System.out.println("所查元素超出范围");
}
while(!isEmpty()){
if(index==top){
indexdata=array[top-1];//因为指针会提前指向上一个位子
}
top--;
}
System.out.println("第"+index+"位的元素位"+indexdata);
return indexdata;
}
//遍历栈
public void print(){
while(!isEmpty()){
System.out.print(array[top-1]+" ");
top--;
}
}
public static void main(String[] args) {
Stack s=new Stack();
s.init(50);
s.push("a");
s.push("1");
s.push("aa");
s.pop();
//s.getindexdata(3);
//s.print();
System.out.println("栈顶元素为:"+s.getTop());
/*测试超过指定长度 不会报错
* for(int i=0;i<=55;i++){
s.push(i);
}
*/
System.out.println(s.isEmpty());
}
}
输出