zoukankan      html  css  js  c++  java
  • 算法(第四版)学习笔记之java实现可以动态调整数组大小的栈

    下压(LIFO)栈:可以动态调整数组大小的实现

    import java.util.Iterator;
    
    public class ResizingArrayStack<Item> implements Iterable<Item>
    {
    
    	
    	private int N = 0;
    	private Item[] a = (Item[]) new Object[1];
    	
    	public boolean isEmpty()
    	{
    		return N == 0;
    	}
    	public int size()
    	{
    		return N;
    	}
    	public void resize(int max)
    	{
    		Item[] temp = (Item[]) new Object[max];
    		for(int i = 0 ; i < N ; i++)
    		{
    			temp[i] = a[i];
    		}
    		a = temp;
    	}
    	
    	public Item pop()
    	{
    		Item item = a[--N];
    		a[N] = null;
    		if(N > 0 && N == a.length / 4)
    		{
    			resize(a.length / 2);
    		}
    		return item;
    	}
    	
    	public void push(Item item)
    	{
    		if(N == a.length)
    		{
    			resize(a.length * 2);
    		}
    		a[N++] = item;
    	}
    	
    	@Override
    	public Iterator<Item> iterator() {
    		// TODO Auto-generated method stub
    		return new reverseArrayIterator();
    	}
    
    	private class reverseArrayIterator implements Iterator<Item>
    	{
    
    		private int i = N;
    		@Override
    		public boolean hasNext() {
    			// TODO Auto-generated method stub
    			return i > 0;
    		}
    
    		@Override
    		public Item next() {
    			// TODO Auto-generated method stub
    			return a[--i];
    		}
    
    		@Override
    		public void remove() {
    			// TODO Auto-generated method stub
    			
    		}
    		
    	}
    	
    }
    

    长处: 
    差点儿(但还没用)达到了随意集合类数据类型的实现的最佳性能: 
    1.每项操作的用时都与集合大小无关; 
    2.空间需求总是不超过集合大小乘以一个常数。

    缺点: 
    某些push()和pop()操作会调整数组的大小,这项操作的耗时和栈的大小成正比。


  • 相关阅读:
    Java编程思想小笔记
    JAVA中的访问权限
    重写equals、hashCode
    JAVA核心技术I之接口与内部类
    JAVA核心技术I之继承
    javascript日志-array数组去重
    vue练习项目
    vue日志-axios跨域获取豆瓣api
    在vue-cli中安装scss,且可以全局引入scss的步骤
    css参考手册
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7269600.html
Copyright © 2011-2022 走看看