栈
我们学习一下数据结构:栈
“栈”者,存储货物或提供旅客住宿的地方,可引申为仓库,中转站,所以引入到计算机领域中,指的是数据暂时存储的地方,所以才会有进栈,出栈的说法。
特点:1):先进后出。数组的插入和删除只能在一端进行完成。
2):由操作系统来分配。一般放些函数的参数值,局部变量的值等。
3):顺序栈是数组来实现的。
栈用一个比喻来形容的话就是:手枪的子弹夹。先进来的先出去。
1 package com.data_Structure.array; 2 3 public class Stack { 4 int[] elements; 5 public Stack(){ 6 elements = new int[0]; 7 } 8 //压人元素 9 public int[] push(int element){ 10 //创建一个新的数组 11 int[] newArr = new int[elements.length+1]; 12 //把旧的数组的值赋值到新的数组中 13 for(int i=0;i<elements.length;i++){ 14 newArr[i]=elements[i]; 15 } 16 //添加元素到新的数组中。下标是旧数组的长度 17 newArr[elements.length]=element; 18 //因为是面向对象的。所以把新数组替换旧数组 19 elements=newArr; 20 return elements; 21 } 22 //取出栈顶的元素 23 public int pop(){ 24 //if栈为空 25 if(elements.length==0){ 26 throw new RuntimeException("这个栈为空"); 27 } 28 //先取出栈顶的元素,是数组的最后一个元素,因为是下标从0开始。所以下标是长度-1 29 int element=elements[elements.length-1]; 30 //因为减少了一个元素。所以要重新创建一个数组。然后把减少的那个给删除掉 31 int[] newArr=new int[elements.length-1]; 32 for(int i=0;i<newArr.length;i++){ 33 newArr[i]=elements[i]; 34 } 35 //替换数组 36 elements=newArr; 37 return element; 38 } 39 40 public static void main(String[] args) { 41 Stack stack = new Stack(); 42 stack.push(1); 43 stack.push(2); 44 stack.push(3); 45 stack.push(4); 46 for(int i:stack.elements){ 47 System.out.println("进栈的值:"+i); 48 } 49 50 System.out.println("出栈的值:"+stack.pop()); 51 System.out.println("出栈的值:"+stack.pop()); 52 System.out.println("出栈的值:"+stack.pop()); 53 System.out.println("出栈的值:"+stack.pop()); 54 } 55 }
输出:
可以看到:先进的是1 但是1最后出来,先出来的是4.