Arraydeque antrian sekuensial dua arah dan daftar antrian rantai dua arah, JDK telah dimasukkan, dihilangkan di sini. ArrayDeque termasuk tumpukan berurutan dan antrian berurutan, sedangkan LinkedList berisi tumpukan rantai dan antrian rantai. Baik ArrayDeque dan LinkedList adalah benang-benang. Antrian prioritas prioritas juga ada di JDK.
1. Implementasi antrian berurutan
package lang;import java.io.Serializable;import java.util.Arrays;/** * @ClassName: ArrayQueue * @Description: Sequential queue* @date January 20, 2014 at 3:46:19 pm * @param <T> */public class ArrayQueue<T> implements Serializable{ /** * @Fields serialVersionUID : TODO */ private static final long serialversionuid = 7333344126529379197L; private int default_size = 10; Kapasitas int pribadi; // Simpan panjang array objek pribadi [] elementData; // Tentukan array untuk menyimpan elemen dari antrian sekuensial int front = 0; // head armada int private int = 0; // tim terminal // membuat arrayqueue publik antrian berurutan yang kosong () {kapasitas = default_size; elementData = objek baru [kapasitas]; } // Buat arrayqueue publik antrian berurutan (elemen t) {this (); elementData [0] = elemen; belakang ++; } public arrayqueue (int initsize) {elementData = objek baru [initsize]; } / *** Buat antrian pesanan dengan array panjang yang ditentukan* elemen @param Tentukan elemen pertama dalam antrian urutan* @param initsize tentukan panjang array yang mendasari antrian pesanan* / arrayqueue publik (elemen t, int initsize) {this.capacity = initsize; elementData = objek baru [kapasitas]; elementData [0] = elemen; belakang ++; } / ** * @title: size * @description: Dapatkan ukuran antrian berurutan * @return * / public int size () {return belakang - depan; } / ** * @title: menawarkan * @description: enqueue * @param elemen * / public void menawarkan (elemen t) {ensureCapacity (belakang + 1); elementData [BARAT ++] = elemen; } private void EnsureCapacity (int mincapacity) {// Jika panjang asli array kurang dari arus yang dibutuhkan int int oldcapacity = elementData.length; if (Minsapacity> oldcapacity) {int newCapacity = (oldcapacity * 3) / 2 + 1; if (newcapacity <mincapacity) newcapacity = mincapacity; // MinCapacity biasanya mendekati ukuran, jadi ini adalah win: elementData = arrays.copyof (elementData, newcapacity); }} / ** * @title: polling * @description: dequeue * @return * / public t poll () {if (isEmpty ()) {lempar indexOutofboundsException baru ("Pengecualian Antrian Kosong"); } // Pertahankan nilai elemen di ujung depan antrian t oldValue = (t) elementData [depan]; // Lepaskan elemen di ujung depan elemen antrian [front ++] = null; Kembalikan OldValue; } / ** * @title: Peek * @description: Kembalikan elemen teratas antrian, tetapi tidak menghapus elemen teratas dari antrian * @return * / public t peek () {if (isEmpty ()) {indexOutOfBoundsException ("kosong Antrian Antrian"); } return (t) elementData [depan]; } / ** * @title: isempty * @description: Tentukan apakah antrian pesanan adalah antrian kosong * @return * / public boolean isEmpty () {return belakang == depan; } / *** @title: clear* @description: Hapus antrian urutan* / public void clear () {// Tetapkan semua elemen dari array yang mendasari ke null arrays.fill (elementData, null); depan = 0; belakang = 0; } public string toString () {if (isEmpty ()) {return "[]"; } else {StringBuilder SB = New StringBuilder ("["); untuk (int i = front; i <retes; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); return sb.delete (len - 2, len). lampai ("]"). tostring (); }}}2. Implementasi antrian rantai
package lang;import java.io.Serializable;/** * @ClassName: LinkQueue * @Description: Chain Queue* @date January 21, 2014 at 3:24:38 pm * @param <T> */public class LinkQueue<T> implements Serializable{ /** * @Fields serialVersionUID : TODO */ private static final long serialVersionUID = -6726728595616312615L; // Tentukan simpul kelas internal, dan instance simpul mewakili simpul antrian rantai. Node kelas pribadi {private t Data; // Simpan data node node private node next; // referensi ke simpul berikutnya // konstruktor tanpa parameter node publik () {} // konstruktor untuk menginisialisasi semua atribut node publik (data, node next) {this.data = data; this.next = next; }} front simpul pribadi; // Simpan simpul kepala dari rantai antrian simpul pribadi belakang; // Simpan simpul ekor dari antrian rantai ukuran int pribadi; // simpan jumlah node yang sudah termasuk dalam rantai antrian/** * <p>: tautan </p> * <p> Deskripsi: buat rantai rantai kosong </p> keduanya tautan </p> * <p> Deskripsi: Buat rantai kosong </p> keduanya tautan */public) <p> Deskripsi: Buat rantai rantai kosong </p> kedua public (p> public) <p> DESKRIPSI: Buat rantai kosong </p> keduanya * depan = null; belakang = null; }/** * <p> Judul: LinkQueue </p> * <p> Deskripsi: Buat antrian rantai dengan menentukan elemen data, yang hanya memiliki satu elemen dalam antrian rantai </p> */tautan publik (elemen t) {front = node baru (elemen, null); // Hanya satu node, titik depan dan belakang ke simpul belakang = depan; ukuran ++; } / ** * @title: size * @description: Dapatkan ukuran antrian berurutan * @return * / public int size () {ukuran pengembalian; } /** * @title: menawarkan * @description: enqueue * @param elemen * /public void menawarkan (elemen t) {// Jika antrian rantai masih merupakan antrian rantai kosong if (front == null) {front = node baru (elemen, null); rear = front;//There is only one node, front and rear point to the node} else { Node newNode = new Node(element, null);//Create a new node.next = newNode;//Let the next of the tail node point to the newly added node rear = newNode;//Taking a new node as the new tail node} size++; } / ** * @title: polling * @description: dequeue * @return * / public t poll () {node oldfront = front; front = front.next; oldfront.next = null; ukuran--; return oldfront.data; } / ** * @title: Peek * @description: Kembalikan elemen teratas antrian, tetapi tidak hapus elemen teratas dari antrian * @return * / public t peek () {return reter.data; } / ** * @title: isempty * @description: Tentukan apakah antrian pesanan adalah antrian kosong * @return * / public boolean isEmpty () {return size == 0; } / *** @title: clear* @description: Hapus antrian pesanan* / public void clear () {// Tetapkan node depan dan belakang sebagai nol depan = null; belakang = null; ukuran = 0; } public string toString () {// Ketika antrian rantai adalah antrian rantai kosong if (isEmpty ()) {return "[]"; } else {StringBuilder SB = New StringBuilder ("["); untuk (node current = front; current! = null; current = current.next) {sb.append (current.data.toString () + ","); } int len = sb.length (); return sb.delete (len - 2, len). lampai ("]"). tostring (); }} public static void main (string [] args) {linkqueue <string> queue = new LinkQueue <string> ("aaaa"); // tambahkan dua elemen antrian.offer ("bbbb"); Queue.offer ("CCCC"); System.out.println (antrian); // croute queue.poll () Setelah menghapus elemen; System.out.println ("Hapus antrian setelah elemen:" + antrian); // tambahkan elemen lagi antrian.offer ("dddd"); System.out.println ("Tambahkan antrian setelah elemen lagi:" + antrian); // tambahkan elemen lagi antrian.poll (); // tambahkan elemen lagi antrian.offer ("eeee"); System.out.println (antrian); }}3. Implementasi antrian melingkar
package lang;import java.io.Serializable;import java.util.Arrays;/** * @ClassName: LoopQueue * @Description: LoopQueue * @date January 20, 2014 at 3:47:14 pm */public class LoopQueue<T> implements Serializable{ /** * @Fields serialVersionUID : TODO */ private static final long serialversionuid = -3670496550272478781l; private int default_size = 10; Kapasitas int pribadi; // Simpan panjang array objek pribadi [] elementData; // Tentukan array untuk menyimpan elemen loop antrian intr Private int front = 0; // armada kepala private int reck = 0; // tim terminal // buat antrian loop kosong dengan loopqueue publik loopqueue () {) {kapasitas = default_size; elementData = objek baru [kapasitas]; } // Buat antrian loop dengan elemen inisialisasi loopqueue publik (elemen t) {this (); elementData [0] = elemen; belakang ++; } / *** Buat antrian loop dengan array dengan panjang yang ditentukan* @param elemen Tentukan elemen pertama dalam antrian loop* @param initsize tentukan panjang array yang mendasari antrian loop* / loopqueue publik (elemen t, int initsize) {this.capity = initsize; elementData = objek baru [kapasitas]; elementData [0] = elemen; belakang ++; } // Dapatkan ukuran loop antrian ukuran int int () {if (isEmpty ()) {return 0; } kembali ke belakang> depan? belakang - depan: kapasitas - (depan - belakang); } // Masukkan queue public void add (elemen t) {if (belakang == depan && elementData [depan]! = Null) {lempar indexOutofboundsException baru ("Pengecualian yang antriannya penuh"); } elementData [BARANG ++] = elemen; // Jika bagian belakang telah mencapai ujungnya, putar kepala belakang = belakang == kapasitas? 0: belakang; } // Hapus PUBLIK PUBLIK TEPURUH () {if (isEmpty ()) {throw indexOutOfBoundsException baru ("Pengecualian Antrian Kosong"); } // Pertahankan nilai elemen di ujung belakang antrian t oldValue = (t) elementData [depan]; // Lepaskan elemen di ujung belakang elemen antrian [front ++] = null; // Jika depan telah mencapai ujungnya, lalu belok depan = depan == kapasitas? 0: depan; Kembalikan OldValue; } // Kembalikan elemen teratas antrian, tetapi jangan hapus elemen teratas dari elemen t publik antrian () {if (isEmpty ()) {lempar indexOutofboundsException baru ("Pengecualian Antrian Kosong"); } return (t) elementData [depan]; } // Tentukan apakah antrian loop adalah antrian public boolean isempty () {// belakang == depan dan elemen di belakang adalah return null belakang == depan && elementData [belakang] == null; } // Hapus loop antrian public void clear () {// Tetapkan semua elemen dari array yang mendasarinya ke null arrays.fill (elementData, null); depan = 0; belakang = 0; } public string toString () {if (isEmpty ()) {return "[]"; } else {// jika depan <belakang, elemen yang valid adalah elemen antara depan dan belakang jika (depan <belakang) {stringBuilder sb = stringBuilder baru ("["); untuk (int i = front; i <retes; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); return sb.delete (len - 2, len). lampai ("]"). tostring (); } // jika depan> = belakang, elemen yang valid adalah antara depan-> kapasitas dan 0-> depan {stringBuilder sb = stringBuilder baru ("["); untuk (int i = front; i <kapasitas; i ++) {sb.append (elementData [i] .toString ()+","); } untuk (int i = 0; i <retes; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); return sb.delete (len - 2, len). lampai ("]"). tostring (); }}} public static void main (string [] args) {loopqueue <string> queue = LoopQueue baru <string> ("aaaa", 3); // tambahkan dua elemen queue.add ("bbbb"); queue.add ("cccc"); // Pada saat ini antrian adalah System.out.println (antrian) lengkap; // Setelah menghapus elemen, antrian dapat menambahkan elemen lain antrian.remove (); System.out.println ("Antrian setelah menghapus elemen:" + antrian); // Tambahkan elemen lagi, dan antrian penuh lagi antrian.add ("dddd"); System.out.println (antrian); System.out.println (antrian); System.out.println (antrian); // Setelah menghapus elemen, antrian dapat menambahkan elemen lain antrian.remove (); // tambahkan elemen lagi, dan antriannya penuh lagi antrian.add ("eeee"); System.out.println (antrian); }}Metode implementasi antrian Java di atas (antrian berurutan, antrian rantai, antrian loop) adalah semua konten yang telah saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.