`
chinagdszsuby
  • 浏览: 20597 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java如何用数组来模拟栈的先进后出

阅读更多
import java.util.Collection;   
import java.util.NoSuchElementException;   
  
public class ArrayStack<E> {   
       
    private int initalSize = 5;   
       
    private Object[] stack;   
       
    private int head;   
       
    private int tail;   
       
    public ArrayStack() {   
           
        initialize(null);   
    }   
       
    public ArrayStack(int newcapacity){   
           
        if (newcapacity < this.initalSize)   
            throw new IllegalArgumentException("The new capacity is too small!");   
           
        initalSize = newcapacity;   
           
        initialize(null);   
    }   
       
    public ArrayStack(E[] items) {   
           
        initialize(items);   
    }   
       
    public ArrayStack(Collection<E> collection) {   
           
        initialize(collection.toArray());   
    }   
       
    private void initialize(Object[] items){   
           
        if (items == null || items.length == 0){   
               
            stack = new Object[initalSize];   
               
            head = 0;   
               
            tail = 0;   
        }   
        else{   
               
            stack = new Object[items.length + 1];   
               
            System.arraycopy(items, 0, stack, 0, items.length);   
               
            head = items.length;   
               
            tail = 0;   
        }   
    }   
  
       
    @SuppressWarnings("unchecked")   
    public E pop(){   
           
        if (size() == 0)   
            throw new NoSuchElementException();   
           
        if (head == 0)   
            head = stack.length;   
           
        Object ret = stack[--head];   
           
        loseWeight();   
           
        return (E)ret;   
    }   
       
    public void push(E item){   
           
        increaseWeight();   
           
        stack[head++] = item;   
  
        if (head == stack.length)   
            head = 0;   
    }   
       
    @SuppressWarnings("unchecked")   
    public E peek(){   
           
        if (size() == 0)   
            throw new NoSuchElementException();   
           
        if (head == 0)   
            return (E)stack[stack.length - 1];   
        else  
            return (E)stack[head-1];   
    }   
       
    public boolean isEmpty(){   
           
        return (size() == 0);   
    }   
       
    public int size(){   
           
        return head >= tail ? head - tail : head + stack.length - tail;   
    }   
       
    public boolean increaseWeight(){   
           
        if (size() == stack.length - 1){   
               
            Object[] newStack = new Object[stack.length * 2];   
               
            System.arraycopy(stack, 0, newStack, 0, stack.length);   
               
            stack = newStack;   
               
            return true;   
        }   
           
        return false;   
    }   
       
    public boolean loseWeight(){   
           
        if (size() == stack.length / 4){   
               
            Object[] newStack = new Object[stack.length/2];   
               
            if (head >= tail){   
                   
                System.arraycopy(stack, tail, newStack, 0, size());   
                   
            }   
            else{   
                   
                System.arraycopy(stack, tail, newStack, 0, stack.length-tail);   
                   
                System.arraycopy(stack, 0, newStack, stack.length-tail, head);   
            }   
  
            tail = 0;   
               
            head = size();   
               
            return true;   
        }   
           
        return false;   
    }   
} 

//本篇文章来源于csdn论坛:http://topic.csdn.net/u/20100201/21/8abd9e46-c84c-4ba1-bf28-3a8ed907bd94.html
原文链接http://edu.codepub.com/2009/1003/16063.php
分享到:
评论

相关推荐

    java螺旋数组代码

    java螺旋数组源码java螺旋数组源码java螺旋数组源码

    java 部分数组递增排序

    java 部分数组递增排序 java 部分数组递增排序 java 部分数组递增排序

    约瑟夫环java纯数组模拟链表写法

    纯手写 java 数组模拟链表约瑟夫环问题 有很大更改空间 仅供参考

    java动态数组的应用

    java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组

    Java-用数组实现栈-队列-线性列表

    Java-用数组实现栈-队列-线性列表(最详细) 有注释 适合java新生 进行数组的练习 3个数据结构的数组实现练习

    java用数组实现约瑟夫环

    java用数组实现的约瑟夫环问题。代码简单易懂。

    java多维数组

    详解java多维数组,提高对java多维数组的理解

    Java数组版ATM

    使用数组构建ATM,采用的是面向对象的设计方法。

    java 数组递增排序

    java 数组递增排序 java 数组递增排序 java 数组递增排序

    JAVA数组与循环模拟的银行ATM系统(JAVA新手可以看看)

    JAVA新手写的ATM系统,高手就略了,只用了数组存放数据,用循环实现ATM功能结构.刚入门的JAVA新手可以看看,活用数组与循环语法

    Java中数组的各种应用

    java中数组的各种用法,工程中以代码的形式,例举java中数组的应用,对初学者有帮助,大鸟就不要看了

    Java统计数组中相同元素个数

    写的Java文件中实现了统计数组中相同元素个数的功能以及统计数组中小于某个元素的所有元素的数量功能,非常的实用。

    Java数组练习题(带答案).doc

    Java数组阶段的选择题、填空题、编程题、判断题都有,适合想自己测试下的学生以及准备出题的老师

    java中字节数组拼接

    使用链式编程写法实现Java中byte数组的拼接。例如byte[] bytes = ByteUtils.get().add(0x41).add(07).add(11).add("15288930000").add(0x45).toArray();更灵活用法请参考Mybytes

    47.java求数组中元素的最大值.zip

    47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组...

    Java实现字符数组全排列的方法

    主要介绍了Java实现字符数组全排列的方法,涉及Java针对字符数组的遍历及排序算法的实现技巧,需要的朋友可以参考下

    树状数组3.java 使用java实现

    树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3....

    Java的数组.docx

    //声明一个整形数组 //声明一个字符串类型的数组 //创建数组 //声明数组的同时进行创建 //初始化数组 //循环为整型数组赋值 //循环输出整型数组中的元素 //求整形数组的累加和 //定义整形数组 //从键盘接收数据,...

    Educoder题目:Java入门 - 数组进阶答案解析.md

    Educoder题目:Java入门 - 数组进阶答案解析

    Java数组与内存控制

    Java数组在内存分配方面的知识;Java数组的静态特征;对于数组变量而言,一定要区分它何时是数组变量,何时代表数组对象本身。

Global site tag (gtag.js) - Google Analytics