我想建立一个固定长度的数组,用来不断接受数据,要求先进先出,最后进的数据处在数组的最前端.求问怎么实现比较好?

解决方案 »

  1.   

    循环队列吧,用数组实现也是一样的,只不过多了两个指示标致而已,一个指示队列的最后一个元素在哪,一个只是队列的头在哪。
    或者直接用java自带的Queue,这个免掉了自己实现数据结构代码。
    你用来不断的接收数据,那数组最好不用,数组都是要初始化时就给定长度的,你定义的数组太大浪费内存空间,太小不够你用;
    还是直接用Queue吧
      

  2.   

    1、你说的功能用队列是最合适的
    2、数组的话,最好用两个指示标志,指示数组第一个和最后一个元素位置,进数据和出数据是分别改变指示标志
    3、你要求的"最后进的数据处在数组的最前端",每进来一个数都要做循环移位,大量数据的话根本就不可取,严重影响系统性能,初学的话可以借鉴
    最后,按你要求给你实现了,代码如下:
    public class test{
    private static int arr[];
    private static final int n = 5;
    public static void main(String args[]) throws InterruptedException{
    arr = new int[n];
    while(true){
    Thread.sleep(500);
    int ran = (int)(Math.random()*100);
    System.out.println(inout(ran)+"\t"+ran);
    }
    }
    public static int inout(int in){
    int m = arr[n-1];
    for(int i = n-1;i>0;i--){
    arr[i] = arr[i-1];
    }
    arr[0] = in;
    return m;
    }
    }给分哦
      

  3.   

    从书那里看到的
    public class ArrayQueue<V>{
    private final v[] values;
    private final int size;
    private int head = 0;
    private int tail = 0;
    private int count =0;

    public ArrayQueue(int size){
    this.size = size;
    values = (V[])new Object[size];
    } public void put(V value){
    values[tail] = value;
    if(++tail == values.length)
    tail = 0;
    count++;
    } public V take(){
    if(count == 0)
    return null; V v = values[head];
    values[head] = null;
    if(++head == values.length)
    head = 0; count--;
    return v;
    }
    }
      

  4.   

    你最好是使用LinkedList集合,来走当前的问题,应为现金后出的,这个LinkedList对象俩面封装了这些方法的操作
      

  5.   

    public class LIFO/*<T>*/ {
      /** 容量 */
      private final int capacity;
      /** 数据 */
      private final int[] data; // 或者泛型T[] data
      /** 当前队列第一个元素的位置 */
      private int offset = 0;
      /** 当前队列大小 */
      private int count = 0;
      public LIFO(int capacity) {
        this.capacity = capacity;
        this.data = new int[capacity];
      }
      /**队尾加入*/
      public void offer(int x) {
        int pos = offset + count;
        if (pos >= capacity) {
          pos -= capacity;
        }
        data[pos] = x;
        if (count < capacity) {
          count++;
        } else {
          offset = (offset + 1) % capacity;
        }
      }
      /**队首移出,没有抛异常*/
      public int poll() {
        if (count == 0) {
          throw new NoSuchElementException();
        }
        int x = data[offset];
        offset = (offset + 1) % capacity;
        count--;
        return x;
      }
      @Override
      public String toString() {
        String sp = "";
        StringBuilder buff = new StringBuilder(capacity << 2).append('[');
        buff.append("capacity=").append(capacity);
        buff.append("|offset=").append(offset);
        buff.append("|count=").append(count);
        buff.append("|data=");
        for (int i = 0; i < count; i++) {
          int pos = (offset + i) % capacity;
          buff.append(sp).append(data[pos]);
          sp = ", ";
        }
        return buff.append(']').toString();
      }
      
      public static void main(String[] args) {
        LIFO lifo = new LIFO(5);
        for (int i = 1; i <= 10; i++) {
          lifo.offer(i);
          System.out.println(lifo);
        }
        for (;;) {
          System.out.println(lifo.poll());
          System.out.println(lifo);
        }
      }
    }