介绍
队列是一种先进先出的数据结构。类似于一截水从一端流向另一端的水管,先进入水管的水最先从另一端出来。
API
Java实现
下面使用链表来实现先进先出的数据结构。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| package com.algs.base;
import java.util.Iterator; import java.util.NoSuchElementException;
public class LinkQueue<Item> implements Iterable<Item> {
private Node first; private Node last; private int N;
private class Node{ Item item; Node next; }
public boolean isEmpty(){return N==0;}
public int size(){return N;}
public void enqueue(Item item){ Node oldLast = last; last = new Node(); last.item = item; last.next = null; if(isEmpty()) first = last; else oldLast.next = last; N++; }
public Item dequeue(){ if(first==null){ System.out.println("队列中没有元素"); return null; } Item item = first.item; first = first.next; if(isEmpty()) last = null; N--; return item; } @Override public Iterator<Item> iterator() { return new ListIterator(); } private class ListIterator implements Iterator<Item> { private Node current = first;
public boolean hasNext() { return current != null; } public void remove() { throw new UnsupportedOperationException(); }
public Item next() { if (!hasNext()) throw new NoSuchElementException(); Item item = current.item; current = current.next; return item; } }
public static void main(String[] args) { LinkQueue<String> queue = new LinkQueue<String>(); queue.enqueue("One"); queue.enqueue("two"); queue.enqueue("three"); for(String node:queue){ System.out.print(node+"->"); } System.out.println(""); System.out.println("node:"+queue.dequeue()); for(String node1:queue){ System.out.print(node1+"->"); } } }
|
说明
对于队列的实现,除了可以使用链表,还可以使用数组来实现。但是在Java中的数组,初始化时必须指定数组的大小,所以当使用数组来实现队列时,需要动态调整队列的大小。
当数组空间不够时,需要扩展空间。当队列中的元素只有空间的四分之一时,此时可以把数组的长度减半。
代码如下:
1 2 3 4 5 6 7 8 9
| private void resize(int max){ Item[] temp = (Item[])new Object[max]; for(int i=0;i<N;i++){ temp[i] = queue[i]; } queue = temp; }
|
GitHub:https://github.com/AlbertKnag/algs-practice
上一篇:基础数据结构01:链表
下一篇:基础数据结构03:栈
留言
欢迎交流想法。留言会通过 GitHub Issues 保存,首次使用需要登录 GitHub。