数据结构之栈实战练习

来源:互联网 发布:unity3d ongui常用函数 编辑:程序博客网 时间:2024/06/03 18:04

定义:栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

栈是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表

下面是栈的一些基本操作练习

package ArrayStack;public class ArrayStack {  private int top;  private int capacity;  private Object[] array;  //初始化栈空间大小为1     public ArrayStack(){         capacity=1;         array=new Object[capacity];         top=-1;     }     //自动提升栈大小     private void doubleStack(){         Object [] newArray=new Object[capacity*2];         System.arraycopy(array, 0, newArray, 0, capacity);         capacity=capacity*2;         array=newArray;     }     //判断是否为空     public boolean isEmpty(){         return (top==-1);     }     //判断是否栈满     public boolean isStackFull(){         return (top ==capacity -1);     }     //入栈     public void push(Object data){         if(isStackFull()){             System.out.println("栈已满,空间自动增大至"+2*capacity);             doubleStack();         }         array[++top]=data;              }     //出栈     public Object pop(){         if(isEmpty()){             System.out.println("栈为空");             return null;         }else{        return    array[top--];          }     }     //删除栈     public void deleStack(){        top=-1;     }     //输出     public void diplay(){         for(int i=0;i<=capacity;i++){            System.out.println( pop());         }                  }}                

来简单测试下


public class ArrayStackTest {    public static void main(String arg[]){    ArrayStack arrayStack=new ArrayStack();    arrayStack.push(new Integer(1));    arrayStack.push(new Integer(2));    arrayStack.push(new Integer(4));    arrayStack.diplay();    }} 

控制台输出:

栈已满,空间自动增大至2
栈已满,空间自动增大至4
1
4
2
栈为空
0
栈为空
0

原创粉丝点击