用数组和链表两种方式实现栈
2017-06-30 13:00
344 查看
1.数组方式
import java.util.Arrays; class MyStack<E>{ private Object[] stack; int size;//数组中存储元素的个数 public MyStack() { stack=new Object[10];//初始长度为10 } //判断堆中元素是否为空 public boolean isEmpty(){ return size==0; } //取出栈顶元素 public E peek(){ if(isEmpty()){ return null; } return (E)stack[size-1]; } //出栈操作 public E pop(){ E e=peek(); stack[size-1]=null; size--; return e; } //入栈操作 public E push(E item){ ensureCapacity(size+1);//检查容量 stack[size++]=item; return item; } //判断数组容器是否已满,若已满则扩充数组空间 private void ensureCapacity(int size){ int len=stack.length; if(size>len){//数组已满 int newLen=10;//每次数组扩充的容量 stack=Arrays.copyOf(stack, newLen); } } } public class Main2 { public static void main(String[] args) { MyStack<Integer> s=new MyStack<Integer>(); s.push(1); s.push(2); System.out.println("栈中元素个数:"+s.size); System.out.println("栈顶元素为:"+s.pop()); } }
2.链表方式
class Node<E>{ Node <E>next=null; E data; public Node(E data){ this.data=data; } } public class Stack<E> { Node<E> top=null; public boolean isEmpty(){ return top==null; } public void push(E data){ Node<E> newNode=new Node<E>(data); newNode.next=top; top=newNode; } 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; } return top.data; } public static void main(String[] args) { Stack<Integer> s=new Stack<Integer>(); s.push(1); s.push(2); System.out.println("栈顶元素为:"+s.pop()); } }
相关文章推荐
- 基于数组和链表两种方式实现栈
- HDU 1520 Anniversary party(树形DP 数组和结构体链表两种实现方式)
- 栈的两种实现方式:数组和链表
- Java的栈实现(数组、链表两种方式)
- java实现栈(数组和链表两种实现方式)
- 算法导论Java实现-随机化数组的两种方式(5.3章节)
- 用 公平的算法 把一个数组打乱(两种实现方式)
- 约瑟夫环(数组和链表实现方式)
- 邻接表的两种实现(链表和数组模拟)
- 线性表的两种实现方式—— 顺序表及单链表的实现 ps:图片放大方法在见评论第一楼
- 两种方式实现数组中负数在左,正数在右
- 递归求集合子集(两种方法实现(数组,链表))
- 学习笔记之约瑟夫环的两种实现方法(数组&链表)
- 栈基于数组和链表的实现方式(java)
- 堆栈的两种实现形式:数组和链表
- 用 公平的算法 把一个数组打乱(两种实现方式)
- 约瑟夫圆环的两种实现,数组模拟和链表模拟
- 线性表的2种实现方式:数组和链表
- Java合并数组的两种实现方式
- 队列的两种实现:数组和链表