我们学习一下数据结构:栈

“栈”者,存储货物或提供旅客住宿的地方,可引申为仓库,中转站,所以引入到计算机领域中,指的是数据暂时存储的地方,所以才会有进栈,出栈的说法。

特点: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 }
View Code

 

输出:

可以看到:先进的是1 但是1最后出来,先出来的是4.

posted @ 2018-11-08 15:12  陆伟  阅读(269)  评论(0编辑  收藏  举报