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中的栈的主要内容,如果未能解决你的问题,请参考以下文章