Java栈的两种实现方式
来源:互联网 发布:成都电影院 知乎 编辑:程序博客网 时间:2024/06/14 14:53
用数组和链表两种方式来实现了栈
首先来看用数组实现的,比较简单
import java.util.Arrays;/* * 用数组来实现一个栈 * 栈:后进先出 * 主要有push pop peek isEmpty * peek 负责获取栈顶元素 在数组的实现中 peek负责获取最新存放在数组中的元素 stack[size-1] * 这样在pop取出元素的时候直接获取peek()的值就好 * push往数组中存放元素的时候 直接将size+1 并且将这个元素放在stack[size++]的位置 * 最后要注意数组的容量 在向数组中放元素的时候不要超过初始化的定义 */public class Stack<E> { int size;//数组中存储元素的个数 private Object[] stack; public Stack(){ stack=new Object[10]; } public Boolean isEmpty(){ return size==0; } @SuppressWarnings("unchecked") public E peek(){ if(isEmpty()){ return null; } return (E) stack[size-1]; } public E push(E item){ stack[size++]=item; return item; } public E pop(){ ensureCapacity(size+1);//往数组中添加元素的时候 先进行容量检测 如果已经放满了 那么就再+10个容量 E e= peek(); stack[size-1]=null; size--; return e; } public void ensureCapacity(int size){ int len =stack.length; if (len>size){ int newLen=10; stack=Arrays.copyOf(stack,newLen); } } public static void main(String[] args){ Stack<Integer> s=new Stack<>(); s.push(56); s.push(6785); s.push(342); System.out.println(s.size); System.out.println("栈顶元素为"+s.pop());// 打印 342 System.out.println("栈顶元素为"+s.pop());//打印 6785 }}
接着是用链表的方式来实现栈,代码如下:
/* * 用链表来实现栈 */class Node<E>{ Node<E>next=null; E data; public Node(E data){this.data=data;}}public class LinkedStack<E> { Node<E>top=null; //头结点设置为空 public boolean isEmpty(){ return top==null; } /* * push时候相当于new一个头结点 让新的结点指向单链表的头结点 * 以新结点作为单链表的头结点即可 */ public void push(E data){ Node<E>newNode=new Node<E>(data); newNode.next=top;//将现在栈顶的元素的值放在第二个 top=newNode; //新的栈顶元素的值放在top中 } /* * pop时候将链表的头结点指向next 将next作为新的头结点即可 */ public E pop(){ if(this.isEmpty()){ return null; } E data= top.data; top=top.next; return data; } public E peek(){ if(this.isEmpty()){ return null; } E data=top.data; return data; }//peek和pop的思路很相似 都是返回top元素 在pop完元素之后还需要将下一个top指针指到top上 public static void main(String [] args){ LinkedStack<Integer> stack=new LinkedStack<>(); stack.push(22); stack.push(23); stack.push(24); stack.pop(); System.out.print(stack.peek());//输出: 23 }}
0 0
- Java栈的两种实现方式
- Java实现多线程的两种方式
- Java定时器 实现的两种方式
- Java定时器 实现的两种方式
- Java实现多线程的两种方式
- java内省的两种实现方式
- Java多线程实现的两种方式
- Java 多线程实现的两种方式
- Java多线程的两种实现方式
- java实现线程的两种方式
- Java实现线程的两种方式
- Java实现线程的两种方式
- JAVA多线程实现的两种方式
- java 实现多线程的两种方式
- java实现同步的两种方式
- Java实现多线程的两种方式
- JAVA多线程实现的两种方式
- java的两种线程实现方式
- 面向对象程序设计上机练习一(函数重载)
- Git/Gitlab项目开发使用简介
- lvs集群管理工具之ipvsadm
- 流的概念及基本分类
- UBUNTU更换内核后没有aufs,更换至overlayfs所碰到的坑
- Java栈的两种实现方式
- 将二叉树拆成链表
- 子树
- 图片加载,避免OOM
- Intellj IDE出现 java.lang.NoClassDefFoundError:
- spring与mybatis三种整合方法
- MSMQ 消息队列、监听MSMQ消息、消息扫描
- 一张表看清哪些企业属于阿里大厂版图
- poj入门水题整理13