Java中的栈

Posted jwznb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的栈相关的知识,希望对你有一定的参考价值。

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

 

关于栈

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

它具有 ‘ 后进先出(LIFO)’ 的特性。

 

关于 Stack 类

Stack类继承Vector类

下表是Stack类的几种方法

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

 

 

 

 

 

 

 

 

 

实例

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

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

 1 import java.util.Arrays;
 2 
 3 public class myStack<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         //返回src数组的最后一个元素
20         return (E) src[src.length - 1];
21     }
22 
23     // 弹出栈顶的数据[移除]
24     public E pop() {
25         //将src数组复制给新数组,方便弹出栈顶的数据
26         E[] sr = (E[]) src;
27         E[] e = (E[]) Arrays.copyOf(src, src.length - 1);
28         src = e;
29         return (E) sr[sr.length - 1];
30     }
31 
32     // 获得栈的长度
33     public int size() {
34         return src.length;
35     }
36 
37     // 判断栈是否为空
38     public boolean empty() {
39         return src.length == 0;
40     }
41 
42     public static void main(String[] args) {
43         myStack<String> st = new myStack<String>();
44         
45         //将数据压入栈
46         st.push("AA");
47         st.push("BB");
48         st.push("CC");
49         st.push("DD");
50         
51         //输出栈顶数据
52         System.out.println("栈顶的数据为:"+st.peek());
53         
54         //输出栈的长度
55         System.out.println("栈的长度为:"+st.size());
56         
57         //当栈不为空时,弹出栈顶数据
58         while (!st.empty()) {
59             System.out.println("弹出数据:"+st.pop());
60         }
61     }
62 }

 

运行结果:

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

 

结果分析

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

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

 






以上是关于Java中的栈的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Java中的栈和堆

Java中的栈

论述Java中的栈与堆

JAVA中的栈和堆

JAVA中的栈和堆

Java中的栈和堆