Java中的栈

学习了一段时间的JAVA,在这里对最近几回课程所学的 ‘ 栈 ’ 进行总结。java

 

关于栈

栈(Stack)是一种只能在一端进行插入和删除操做的特殊线性表。数组

它具备 ‘ 后进先出(LIFO)’ 的特性。函数

以下图,能够把栈比做一个水桶 ,先放的东西在桶的底部,后放的东西在桶顶部。学习

而咱们查看和取出都只能对桶顶部的东西进行操做,若是我定义一个数组,那咱们只能先对数组的最后一个元素进行操做,例以下图的a[6],而后才能往下取。测试

 

 

关于 Stack 类

Stack类继承Vector类spa

下表是Stack类的几种方法code

修饰语和类型 方法和说明
boolean empty()
          测试堆栈是否为空。
E peek()
          查看堆栈顶部的对象,但不从堆栈中移除它。
E pop()
          移除堆栈顶部的对象,并做为此函数的值返回该对象。
E push(E item)
          把项压入堆栈顶部。
int search(Object o)
          返回对象在堆栈中的位置,以 1 为基数。

 

 

 

 

 

 

 

 

 

 

实例

这里我暂且用数组来实现栈对象

ps:我这里用了java的泛型,关于java的泛型在上篇随笔里我有介绍。blog

 1 import java.util.Arrays;  2 
 3 public class Stack<E> {  4 
 5     // 新建一个长度为0的数组
 6     private Object[] src = new Object[0];  7 
 8     // 将数据压入栈
 9     public void push(E s) { 10         // 复制src数组,长度为原数组的长度+1
11         E[] e = (E[]) Arrays.copyOf(src, src.length + 1); 12         // 将传入的数据给新数组的最后一个元素
13         e[e.length - 1] = (E) s; 14         src = e; 15  } 16 
17     // 查看栈顶的数据
18     public E peek() { 19         // 判断栈是否为空
20         if (src.length == 0) { 21             return null; 22  } 23         // 返回src数组的最后一个元素
24         return (E) src[src.length - 1]; 25  } 26 
27     // 弹出栈顶的数据[移除]
28     public E pop() { 29         if (src.length == 0) { 30             return null; 31  } 32         // 将src数组复制给新数组,方便弹出栈顶的数据
33         E[] sr = (E[]) src; 34         E[] e = (E[]) Arrays.copyOf(src, src.length - 1); 35         src = e; 36         return (E) sr[sr.length - 1]; 37  } 38 
39     // 得到栈的长度
40     public int size() { 41         return src.length; 42  } 43 
44     // 判断栈是否为空
45     public boolean empty() { 46         return src.length == 0; 47  } 48 
49     public static void main(String[] args) { 50         Stack<String> st = new Stack<String>(); 51 
52         // 将数据压入栈
53         st.push("AA"); 54         st.push("BB"); 55         st.push("CC"); 56         st.push("DD"); 57 
58         // 输出栈顶数据
59         System.out.println("栈顶的数据为:" + st.peek()); 60 
61         // 输出栈的长度
62         System.out.println("栈的长度为:" + st.size()); 63 
64         // 当栈不为空时,弹出栈顶数据
65         while (!st.empty()) { 66             System.out.println("弹出数据:" + st.pop()); 67  } 68  } 69 }

 

运行结果:继承

栈顶的数据为:DD
栈的长度为:4
弹出数据:DD
弹出数据:CC
弹出数据:BB
弹出数据:AA

 

结果分析

遵循了栈 ‘ 后进先出 ’ 的特性,输入 AA、BB、CC、DD,弹出 DD、CC、BB、AA。

根据这个特性,栈在某些时候是必不可少的。

相关文章
相关标签/搜索