数据结构4(顺序栈)

来源:互联网 发布:网页美工是做什么的 编辑:程序博客网 时间:2024/05/19 23:23
package stack;import java.util.Arrays;/** * 栈:只能在表的一端进行增删的线性表,后进先出 * 下面的顺序栈的数据结构 * @author 后飞IT * */public class Stack {/**存放数据的空间*/private int[] elem;/**指向栈顶的标识*/int top;public int[] getElem() {return elem;}public void setElem(int[] elem) {this.elem = elem;}public int getTop() {return top;}public void setTop(int top) {this.top = top;}@Overridepublic String toString() {return "Stack [elem=" + Arrays.toString(elem) + ", top=" + top + "]";}}

package stack;public class StackTest {public static void main(String[] args) {StackTest st = new StackTest();//初始化栈Stack stack = st.init();//判断是否为空栈System.out.println(st.isEmpty(stack));//添加操作stack=st.pushStack(stack, 12);stack=st.pushStack(stack, 11);//弹栈操作stack=st.pop(stack);//取出栈顶值System.out.println("当前栈的栈顶值为"+st.getTop(stack));System.out.println(stack);}/** * 初始化栈  这里将顺序的大小初始化为10,初始值为0,因为在单链表中已经有针对顺序类型的扩容,所以在这里就不做扩容的这个部分了 * @return */private Stack init(){Stack stack = new Stack();//将创建的数组的的引用赋给stackint[] elem=new int[10];stack.setElem(elem);//-1代表此时,栈中为空stack.setTop(-1);return stack;}/** * 压栈操作    * @param agr  压入栈中的数值 */private Stack pushStack(Stack stack,int arg){//不想对栈进行扩容了,爱玩自己玩去if(stack.getTop()==stack.getElem().length){throw new RuntimeException("堆栈已经满了");}//获取栈顶指针位置+1,得到要压栈的位置int top = stack.getTop()+1;//移动指针,并将应有的内容压倒栈中stack.getElem()[top]=arg;//压栈后,记得将栈的栈顶指针设置stack.setTop(top);return stack;}/** * 弹栈操作 * @param stack * @return */private Stack pop(Stack stack){//将栈顶指针指向的地方设置为0,表示为空stack.getElem()[stack.getTop()]=0;//栈顶指针-1stack.setTop(stack.getTop()-1);return stack;}/** * 判断栈是否为空 * @param stack * @return  * true  ->   empty * false  ->   hasSomething */private boolean isEmpty(Stack stack){if(stack.getTop()==-1){return true;}return false;}/** * 取栈顶值 * @return */private int getTop(Stack stack){if(stack.getTop()!=-1){return stack.getElem()[stack.getTop()];}else{throw new RuntimeException("此栈已经为空");}}}