java基於有序連結串列的優先順序佇列實現
1.準備
Link.class
類中包含資料項(為了簡單,這裡的資料項就為int
值)和下一個Link
節點的引用
/**連結串列中的節點類,儲存資料和節點資訊*/
public class Link
{
int priority;//優先順序值
Link next;
}
2.實現有序連結串列
OrderLinkList.class
類用來處理節點之間的關係
public class OrderLinkList
{
private Link first;//新的頭節點
private Link current;//儲存中間節點資訊,保證節點在移動過程中不丟失上一個節點資訊
private Link previous;//舊的頭節點
private boolean flag = false;
private int size = 0;//連結串列的長度
/*資料插入方法*/
public void insert(Object data)
{
/*把資料插入到連結串列的第一個節點*/
Link link = new Link();
link.priority = (Integer) data;
link.next = first;
first = link;
current = first;
previous = first.next;
/*得到資料插入的位置,flag用來控制是否要對節點移動*/
while (current.next != null && link.priority >= current.next.priority)
{
flag = true;
if(current.next == null){break;}
current = current.next;
}
/*移動節點到目標位置*/
if(flag)
{
link.next = current.next;
current.next = link;
first = previous;
flag = false ;
}
size++;
}
public int get(int index)
{
/*沒有對index進行檢查,有可能發生空指標錯誤*/
current = first;
for (int i = 0; i < index; i++) {
current= current.next;
}
return current.priority;
}
}
圖片畫得有點醜,將就著看
3.有序連結串列測試
public class LinkMain {
public static void main(String[] args) {
OrderLinkList list = new OrderLinkList();
list.insert(19000);
list.insert(8);
list.insert(800);
list.insert(25);
list.insert(800);
list.insert(3);
list.insert(820);
list.insert(6);
for (int i = 0; i < 8; i++)
{
System.out.print(list.get(i)+" ");
}
}
}
執行結果:
3 6 8 25 800 800 820 19000
Process finished with exit code 0
3.優先順序佇列實現
PriorityQueue.class
基於OrderLinkList.class
實現
public class PriorityQueue {
private int size = 0;//隊列當前長度
private int length = 5;//指定佇列的長度
private OrderLinkList list = new OrderLinkList();
public boolean add(int data) {
if (size <= length) {
list.insert(data);
size++;
return true;
} else return false;
}
//移除隊頭資料
public Integer remove() {
if (size > 0) {
Integer result = new Integer(list.get(0));
list.removeFirst();
size--;
return result;
} else return null;
}
}
4.優先順序佇列測試
public class LinkMain {
public static void main(String[] args) {
//優先順序佇列的長度為5
PriorityQueue list = new PriorityQueue(5);
//資料add()測試
System.out.println(list.add(19000));
list.add(8);
list.add(800);
list.add(25);
list.add(800);
list.add(820);
System.out.println(list.add(33));
//資料remove()測試
for (int i = 0; i < 8; i++)
{
System.out.print(list.remove()+" ");
}
}
}
執行結果:
true
false
8 25 800 800 820 19000 null null
Process finished with exit code 0
以上就是java簡單實現基於有序連結串列的優先順序佇列,才開始學習這方面的知識,才識淺薄,寫的程式碼也不規範,望各位指正!
相關推薦
java基於有序連結串列的優先順序佇列實現
1.準備 Link.class類中包含資料項(為了簡單,這裡的資料項就為int值)和下一個Link節點的引用 /**連結串列中的節點類,儲存資料和節點資訊*/ public class
基於有序連結串列實現的優先佇列
博主最近在苦讀演算法第四版,在第二章第四節的優先佇列的實現中,作者提到了可以用有序或無序連結串列實現優先佇列,博主在網上大致查閱了一下,好像沒有現成的java程式碼(泛型的),於是自己根據找到的程式碼簡單修改並實現了一下,特此記錄一下。 /*定義結點的抽象資料型別*/
基於連結串列的佇列實現
1.建立鏈節點類link 只有一種資料int型別,和對下一個鏈節點的引用next public class Link { public int a; public Link next; public Link(int m){ a=m; }
LeetCode題目--合併兩個有序連結串列(python實現)
題目 將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4
LeetCode 21.合併兩個有序連結串列 C++程式碼實現
題目描述: 將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4
基於java自帶連結串列結構實現迴圈連結串列
背景 有些場景下,需要迴圈連結串列,如某些狀態是從一個到下一個,最後再回到開始。此種情況下,可以採用迴圈連結串列來實現。 程式碼 package com.cxyzy.tencentfacerec; import java.util.Iterator; import java.u
java實現將兩個有序連結串列合成一個新的有序連結串列
連結串列節點結構及方法: public class Node { private Node next; private Integer number; Node(){} Node(Integer number) { this.number=number; next=n
教你如何使用Java手寫一個基於連結串列的佇列
在上一篇部落格【教你如何使用Java手寫一個基於陣列的佇列】中已經介紹了佇列,以及Java語言中對佇列的實現,對佇列不是很瞭解的可以我上一篇文章。那麼,現在就直接進入主題吧。 這篇部落格主要講解的是如何使用單鏈表實現一個簡單版的佇列。單向連結串列佇列是屬於非迴圈佇列,同時佇列的長度是不受限制的,也就
java實現兩個有序連結串列合併為一個有序連結串列
節點類 public class Node { private Node next; private Integer number; Node(Integer number) { this.number=number; next=null; } Node() {
LeetCode第23題:合併K個有序連結串列(JAVA實現)
題目: 我的解答: 思路很簡單,把所有的資料先讀到ArrayList中然後轉到陣列中,然後排序,然後構建新連結串列 程式碼: /** * Definition for singly-linked list. * public class ListNode {
兩個有序連結串列序列的合併(java實現)
02-線性結構1 兩個有序連結串列序列的合併(15 分)本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。函式介面定義:List Merge( List L1, List L2 );輸入樣例:3 1 3 5 5 2 4 6 8 10 輸出樣例:
基於連結串列、陣列實現佇列、迴圈佇列
佇列是一種先進先出的資料結構,它和棧的性質正好相反,但是兩者卻經常結合在一起實現一些特殊的操作。 1.佇列的介面 public interface QueueADT { //入隊 public void enqueue(Object element); //出隊 p
Java資料結構之——佇列:通過連結串列和陣列實現
//連結串列實現佇列 class Node<E>{ Node<E> next = null; E data; public Node(E data){ this.data = data; } } public clas
有序連結串列實現優先佇列
/** * 有序連結串列的優先佇列 * */ class Lin { public int data; public Lin next; public Lin(int i) { dat
自己實現Java中基於雙向連結串列的LinkedList
以下程式碼完全原創,如有紕漏或不足,請指出,多謝。 用於實現雙向連結串列的節點物件,程式碼如下: package custom.node; public class Node<E> { //節點中的資料 private
java兩個有序連結串列合併
java兩個有序連結串
Leetcode演算法Java全解答--21. 合併兩個有序連結串列
Leetcode演算法Java全解答–21. 合併兩個有序連結串列 文章目錄 Leetcode演算法Java全解答--21. 合併兩個有序連結串列 題目 想法 結果 總結 程式碼 我的答案
資料結構 - 基於連結串列的佇列
基於連結串列的佇列 當我們基於連結串列實現佇列時,需要從一端加元素,另一端取出元素,就需要引入一個新的變數tail指向連結串列的尾部,此時,向尾部進行新增操作時間複雜度會變為O(1),然而刪除操作還是需要從head向後遍歷,所以此時選擇連結串列尾為隊尾,連結串列頭為隊首。 基於連結串列的實
java版資料結構與演算法—有序連結串列
package com.zoujc.sortLink; /** * 有序連結串列 */ class Link { public int dData; public Link next; public Link(int dd){ dData = d
Python3 連結串列、佇列和棧的實現
# -!- coding: utf-8 -!- # !/usr/bin/env python 3.6.3 # author: Vivian # time: 2018/9/16 # 使用list列表構造棧 class Stack(object): def __init