⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bptree.java

📁 一个简单的数据库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        int currec = node.maxLE(rec.getSearchKey());        if (node.isLeaf()) {            tmp = new Pair(rec.getSearchKey(), rec);        } else {            tmp = insertHelp((BpNode) node.recArray[currec].pointer, rec);            if (tmp == null) {                return null;            }        }        if (!node.isFull()) {            node.addAfter(currec, tmp);        } else {            BpNode tp = node.split(currec, tmp);            if (tp.isLeaf()) {                return new Pair(tp.recArray[1].key, tp);            } else {                Pair maxP = node.recArray[--node.count];	//	删除了此Pair                node.recArray[node.count] = null;                tp.recArray[0].pointer = maxP.pointer;                return new Pair(maxP.key, tp);            }        }        return null;    }    public Bucket find(Comparable k) {        int currec = root.maxLE(k);        BpNode current = root;        while (!current.isLeaf()) {            current = (BpNode) current.recArray[currec].pointer;            currec = current.maxLE(k);        }        if (!current.recArray[currec].key.equals(k)) {            return null;        }        return (Bucket) current.recArray[currec].pointer;    }    BpNode getNode(Comparable k) {        int currec = root.maxLE(k);        BpNode current = root;        while (!current.isLeaf()) {            current = (BpNode) current.recArray[currec].pointer;            currec = current.maxLE(k);        }        return current;    }    ArrayList getAE(BpNode bpn, int startIndex) {        ArrayList recArr = new ArrayList();        while (bpn != null) {            for (int i = startIndex; i < bpn.count; i++) {                Bucket ele = (Bucket) bpn.recArray[i].pointer;                for (int j = 0; j < ele.m_pointers.size(); j++) {                    recArr.add(ele.m_pointers.get(j));                }            }            bpn = bpn.rightSibling;        }        return recArr;    }    ArrayList getBE(BpNode bpn, int endIndex) {        ArrayList recArr = new ArrayList();        BpNode firstNode = firstLeaf();        while (firstNode != bpn) {            for (int i = 1; i < firstNode.count; i++) {                Bucket ele = (Bucket) firstNode.recArray[i].pointer;                for (int j = 0; j < ele.m_pointers.size(); j++) {                    recArr.add(ele.m_pointers.get(j));                }            }            firstNode = firstNode.rightSibling;        }        for (int i = 1; i <= endIndex; i++) {            Bucket ele = (Bucket) bpn.recArray[i].pointer;            for (int j = 0; j < ele.m_pointers.size(); j++) {                recArr.add(ele.m_pointers.get(j));            }        }        return recArr;    }    public ArrayList findE(Comparable k) {        Bucket ele = find(k);        if (ele == null) {            return null;        }        return ele.m_pointers;    }    public ArrayList findAE(Comparable k) {        BpNode current = getNode(k);        int currec = current.maxLE(k);        if (!current.recArray[currec].key.equals(k)) {            currec++;            if (currec == current.count) {                currec = 1;                current = current.rightSibling;                if (current == null) {                    return null;                }            }        }        return getAE(current, currec);    }    public ArrayList findA(Comparable k) {        BpNode current = getNode(k);        int currec = current.maxLE(k);        currec++;        if (currec == current.count) {            currec = 1;            current = current.rightSibling;            if (current == null) {                return null;            }        }        return getAE(current, currec);    }    public ArrayList findBE(Comparable k) {        BpNode current = getNode(k);        if (current == null) {            return null;        }        int currec = current.maxLE(k);        return getBE(current, currec);    }    public ArrayList findB(Comparable k) {        BpNode current = getNode(k);        int currec = current.maxLE(k);        if (current.recArray[currec].key.equals(k)) {            currec--;            if (currec <= 0) {                if (current == firstLeaf()) {                    return null;                }                current = current.leftSibling;                currec = current.recArray.length - 1;            }        }        return getBE(current, currec);    }    BpNode firstLeaf() {        BpNode curr = root;        while (!curr.isLeaf()) {            curr = (BpNode) curr.recArray[0].pointer;        }        return curr;    }    public boolean isFirstChild(BpNode node, Comparable k) {        BpNode curr = root;        int currec = curr.maxLE(k);        while (curr.recArray[currec].pointer != node) {            curr = (BpNode) curr.recArray[currec].pointer;            currec = curr.maxLE(k);        }        return (currec == 0);    }    void print() {        if (root == null) {            System.out.println("Empty tree");            return;        }        BpNode curr = firstLeaf();        while (curr != null) {            System.out.println(curr);            curr = curr.rightSibling;        }        System.out.println("========================");    }    void printRev() {        BpNode curr = firstLeaf();        while (curr.rightSibling != null) {            curr = curr.rightSibling;        }        while (curr != null) {            System.out.println(curr);            curr = curr.leftSibling;        }        System.out.println("===========");    }    public String toString() {        if (root == null) {            return "Empty Tree!";        }        String res = "";        BpNode first = root;        Object tmp = first;        while (tmp instanceof BpNode) {            first = (BpNode) tmp;            res += first + "\t";            BpNode curr = first.rightSibling;            while (curr != null) {                res += curr + "\t";                curr = curr.rightSibling;            }            res += "\n";            tmp = first.recArray[0].pointer;        }        return res;    }    static void f1() {        int[] arr = {            1, 2, 15, 7, 6, 3, 8, 10, 9, 11, 14, 16, 17,        };        BpTree tree = new BpTree();        for (int i = 0; i < arr.length; i++) {            tree.insert(arr[i]);        }        System.out.println(tree);        for (int i = 0; i < 20; i++) {            System.out.println(tree.find(i));        }    }    static void f2() {        BpTree tree = new BpTree();        int[] arr = RandomArray.randomArr(20);        for (int i = 0; i < arr.length; i++) {            tree.insert(arr[i]);        }        tree.print();        System.out.println("================");        tree.printRev();    }    static void f3() {        BpTree tree = new BpTree(7, "t", "em");        int test = 1000;        int[] arr1 = RandomArray.randomArr(test);        int[] arr2 = RandomArray.randomArr(test);        for (int i = 0; i < arr1.length; i++) {            System.out.print(arr1[i] + ",");        }        System.out.println();        for (int i = 0; i < arr2.length; i++) {            System.out.print(arr2[i] + ",");        }        System.out.println();        for (int i = 0; i < arr1.length; i++) {            tree.insert(arr1[i]);        }        System.out.println(tree);        for (int i = 0; i < arr2.length; i++) {            tree.remove(arr2[i]);        }        System.out.println(tree);    }    static void f4() {        BpTree tree = new BpTree();        int[] arr1 = {34, 9, 43, 26, 12, 14, 31, 27, 37, 35, 23, 47, 19, 39, 22, 44, 16, 7, 18, 24, 40, 6, 11, 41, 21, 49, 32, 5, 28, 1, 17, 3, 45, 10, 42, 33, 25, 30, 15, 50, 36, 8, 38, 13, 4, 29, 46, 20, 48, 2};        int[] arr2 = {31, 17, 35, 42, 7, 16, 33, 13, 19, 12, 4, 41, 50, 2, 21, 24, 23, 47, 14, 28, 25, 49, 38, 9, 18, 27, 22, 48, 8, 36, 44, 37, 30, 40, 39, 32, 46, 10, 45, 6, 11, 20, 15, 43, 1, 34, 3, 29, 26, 5};        for (int i = 0; i < arr1.length; i++) {            System.out.print(arr1[i] + ",");        }        System.out.println();        for (int i = 0; i < arr2.length; i++) {            System.out.print(arr2[i] + ",");        }        System.out.println();        for (int i = 0; i < arr1.length; i++) {            tree.insert(arr1[i]);        }        System.out.println(tree);        for (int i = 0; i < arr2.length; i++) {            tree.remove(arr2[i]);            System.out.println(tree);        }        System.out.println(tree);    }    static void f5() {        BpTree tree = new BpTree();        int[] arr = RandomArray.randomArr(100);        for (int i = 0; i < arr.length; i++) {            tree.insert(arr[i]);        }        tree.print();        System.out.println(tree);    }    static void f6() {        BpTree tree = new BpTree(8, "te", "m");        String[] arr1 = RandomArray.randomStrArr();        String[] arr2 = RandomArray.randomStrArr();        for (int i = 0; i < arr1.length; i++) {            System.out.print(arr1[i] + "\t");        }        for (int i = 0; i < arr1.length; i++) {            tree.insert(arr1[i]);            System.out.println(tree);        }        for (int i = 0; i < arr2.length; i++) {            Bucket tmp = tree.find(arr2[i]);            System.out.println("" + i + ": " + tmp);        }    }    public static void main(String[] args) {        f6();    }}class RandomArray implements Serializable {    static String[] initArr1 = {        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",        "u", "v", "w", "x", "y", "z"    };    static String[] initArr2 = {        "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"    };    static String[] initArr;    static {        initArr = new String[initArr1.length * initArr2.length];        int k = 0;        for (int i = 0; i < initArr1.length; i++) {            for (int j = 0; j < initArr2.length; j++) {                initArr[k++] = initArr1[i] + initArr2[j];            }        }    }    static int[] randomArr(int size) {        int[] arr = new int[size];        for (int i = 0; i < arr.length; i++) {            arr[i] = i + 1;        }        for (int i = 0; i < size * 10; i++) {            int r1 = (int) (Math.random() * size);            int r2 = (int) (Math.random() * size);            int tmp = arr[r1];            arr[r1] = arr[r2];            arr[r2] = tmp;        }        return arr;    }    static String[] randomStrArr() {        String[] arr = initArr;        for (int i = 0; i < arr.length * 10; i++) {            int r1 = (int) (Math.random() * arr.length);            int r2 = (int) (Math.random() * arr.length);            String tmp = arr[r1];            arr[r1] = arr[r2];            arr[r2] = tmp;        }        return arr;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -