데이터 구조와 알고리즘 (V) 큐 - 순차 저장 구조


큐의 정의 : 삽입 조작은 일단이 상기 선형 테이블 삭제 작업의 타단에 허용된다.

예를 들어, 모바일, 차이나 유니콤, 통신 및 기타 고객 서비스 전화처럼 고객 서비스 직원과 고객은 고객 서비스 직원이 바쁜 그래서의 경우, 고객이 첫째을 기다리고, 고객 서비스 직원과 유휴 때까지 기다려야했다, 항상 비교하여 몇 가지 연결 고객은 전화, 그래서 현재 고객의 고객 서비스 전화 통화 대기 과정이있을 것이다. 고객 서비스 시스템은 큐 데이터 구조의 응용 프로그램입니다.

FIFO 큐에 삽입 단부, 테일이라 불리는 큐 헤드 엔드를 삭제하도록 허용 할 수있는 선형 테이블이다.
그림 삽입 설명 여기
우선 그냥이 인터페이스를 구현하자, 인터페이스 큐 큐, 쓰기 ArrayQueue이 인터페이스의 이점을 실현하고 다른 큐를 작성하는 더 이상 필요 후 대기열의 인터페이스를 정의 정의, 당신은 추상 메소드 인터페이스를 재정의 할 수 있습니다.
그런 다음 큐를 작성하려고, 대기열이 그다지 목록이 비어 선고했다 추상 메소드는, 꼬리를 얻기 위해 첫번째 팀을 얻을, 팀에 요소의 유효한 숫자, 팀을 구 여러 추상 메소드는 큐를 비울 수 있습니다.

public interface Queue<E> extends Iterable {
    //获取队列中元素的个数
    int getSize();

    //判断队列是否为空
    boolean isEmpty();

    //入队一个元素
    void enqueue(E e);

    //出队一个元素
    E dequeue();

    //获取队头
    E getFront();

    //获取队尾
    E getRear();

    //清空队列
    void clear();

}

여기에, 반복자를 구현 ArrayQueue 선형 형태 이전에 작성된 인터페이스를 구현할 수 있도록의 Iterable을 확장, 우리는 인터페이스가 하나 개의 끝에서 선형 테이블 삭제 작업의 다른 쪽 끝에서 삽입을 허용하지만, 또한 선형 형태의 성격 말 선형 테이블 개체 ArrayQueue 선형 형태의 직접적인 사용으로 생성 될 수있다.

import java.util.Iterator;
/*
  队列的顺序存储结构
*/
public class ArrayQueue<E> implements Queue<E> {
    //定义线性表对象list
    private ArrayList<E> list;
    //构造函数
    public ArrayQueue(){
        list=new ArrayList<>(); //创建list对象
    }
    //获取队列有效元素,用线性表的方法
    @Override
    public int getSize() {
        return list.getSize();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    @Override
    public void enqueue(E e) {
        list.addLast(e);
    }

    @Override
    public E dequeue() {
        return list.removeFirst();
    }

    @Override
    public E getFront() {
        return list.getFirst();
    }

    @Override
    public E getRear() {
        return list.getLast();
    }

    @Override
    public void clear() {
        list.clear();
    }

    @Override
    public Iterator<E> iterator() {
        return list.iterator();
    }
	//以数组的格式返回,方便测试
    @Override
    public String toString() {
        StringBuilder sb=new StringBuilder();
        sb.append(String.format("ArrayQueue: %d/%d\n",getSize(),list.getCapacity()));
        sb.append('[');
        if(isEmpty()){
            sb.append(']');
        }else{
            for(int i=0;i<list.getSize();i++){
                sb.append(list.get(i));
                if(i==list.getSize()-1){
                    sb.append(']');
                }else{
                    sb.append(',');
                }
            }
        }
        return sb.toString();
    }
}

게시 70 개 원래 기사 · 원의 찬양 (56) · 전망 1985

추천

출처blog.csdn.net/qq_43624033/article/details/103569962