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

📄 algthread.java

📁 java算法大全
💻 JAVA
字号:
/* AlgThread.java */import java.awt.*;import java.io.*;import java.net.*;import java.util.*;public class AlgThread extends Thread {    int capacity = 7;    static String[] dataSets = {"Queue Capacity 7", "Queue Capacity 15", 				"Queue Capacity 31"};    AlgAnimFrame frame;    DrawingPanel drawingPanel;    Node tree;    Heap heap;    public AlgThread(AlgAnimFrame frame) {        this.frame = frame;        if (frame != null && frame.alg != null &&             frame.alg.drawingPanel != null) {            // drawingPanel already created -> this constructor called from            // clicking the run button -> use the generated data set            this.drawingPanel = frame.alg.drawingPanel;	    this.heap = frame.alg.heap;	    this.capacity = frame.alg.capacity;        } else {            // this constructor called from Frame constructor            drawingPanel = new DrawingPanel();            frame.drawingPanel = (Panel)this.drawingPanel;	    /*-*/heap = new Heap(drawingPanel, capacity); 	    /*-*/drawingPanel.drawHeap(heap);        }    }    public void setDelay(int delay) {	drawingPanel.setDelay(delay);    }    public void generateData() {        int choice = frame.control_panel.getDataChoice();        if (choice == 0) {	    capacity = 7;	    /*-*/heap = new Heap(drawingPanel, capacity); 	    /*-*/drawingPanel.drawHeap(heap);        } else if (choice == 1) {	    capacity = 15;	    /*-*/heap = new Heap(drawingPanel, capacity); 	    /*-*/drawingPanel.drawHeap(heap);	} else if (choice == 2) {	    capacity = 31;	    /*-*/heap = new Heap(drawingPanel, capacity); 	    /*-*/drawingPanel.drawHeap(heap);	}	/*-*/heap.initHeap();    }    public int generateRandomData() {        return (new Double(Math.random()*99).intValue() + 1);    }    public boolean isInput() {	return (generateRandomData() < 70);    }     public int[] setHeapWithSize(int[] a, int i) {	int[] old = a;	a = new int[i];	for (int j = 0; j < i; j++)	    a[j] = old[j];	return a;    }/*--------------------------------------------------------------------*/    public void animatePriorityQueue() { /*-*/int line_num = 0;	/*-*/frame.Highlight(line_num);	/*-*/frame.setText(0, "Executing priority Q animation demo..");	/*-*/frame.setText(0, "This priority Q repeatedly receives random inputs and extracts outputs...");	int[] Q = new int[0];	/*-*/frame.Highlight(line_num + 1);	while (true) {	    /*-*/frame.Highlight(line_num + 2);	    /*-*/frame.Highlight(line_num + 3);	    if (isInput() && Q.length < capacity) {	    	/*-*/frame.Highlight(line_num + 4);		/*-*/frame.setText(1, "Inserting into the queue...");	    	int input = generateRandomData(); 	    	/*-*/heap.addInput(input); frame.Highlight(line_num + 5);		Q = addHeap(Q, input);	    	/*-*/frame.Highlight(line_num + 5);	    } else if (Q.length > 0) {	    	/*-*/frame.Highlight(line_num + 6);		/*-*/frame.setText(1, "Extracting item from queue...");	    	/*-*/frame.Highlight(line_num + 7);		Q = delHeap(Q);	    	/*-*/frame.Highlight(line_num + 8);	    }	    /*-*/frame.Highlight(line_num + 8);	    /*-*/frame.Highlight(line_num + 9); frame.waitStep();	}    }    public int[] addHeap(int[] a, int i) { /*-*/int line_num = 12;	/*-*/frame.Highlight(line_num);	/*-*/frame.setText(1, "Addition to the heap...");	int[] result = new int[a.length + 1];	/*-*/frame.Highlight(line_num + 1);	for (int k = 0; k < a.length; k++)	    result[k] = a[k];	result[a.length] = i;	/*-*/frame.Highlight(line_num + 2);	/*-*/frame.Highlight(line_num + 3);	/*-*/frame.Highlight(line_num + 4); heap.input2heap();	/*-*/frame.Highlight(line_num + 5);	up(result, result.length);	/*-*/frame.Highlight(line_num + 5);	/*-*/frame.Highlight(line_num + 6);	return result;    }    public void up(int[] a, int i) { /*-*/int line_num = 21;	/*-*/frame.Highlight(line_num); heap.highlight(i-1); heap.redraw();	/*-*/frame.Highlight(line_num + 1);	/*-*/frame.setText(2, "Moving UP...");	if (parent(i) > 0) {	    int p = parent(i);	    /*-*/frame.Highlight(line_num + 2);	    /*-*/heap.highlight(p-1); heap.redraw();	    /*-*/frame.Highlight(line_num + 3);	    if (a[i-1] > a[p-1]) {		// swap with parent and up parent	/*-*/frame.setText(2, "Exchange with parent...");		int tmp = a[i-1]; a[i-1] = a[p-1]; a[p-1] = tmp;	    	/*-*/frame.Highlight(line_num + 5); 		/*-*/heap.exchangeArrow(p-1,i-1);		/*-*/heap.setNode(i-1, a[i-1]);		/*-*/heap.setNode(p-1, a[p-1]);		/*-*/heap.restore(i-1); heap.restore(p-1); heap.redraw();	    	/*-*/frame.Highlight(line_num + 6);		up(a, p);	    	/*-*/frame.Highlight(line_num + 6);	    }	    /*-*/frame.Highlight(line_num + 7);	    /*-*/heap.restore(p-1);	}	/*-*/frame.Highlight(line_num + 8);	/*-*/heap.restore(i-1);    }    public int[] delHeap(int[] a) { /*-*/int line_num = 32;	/*-*/frame.Highlight(line_num);heap.addOutput(a[0]);	/*-*/frame.setText(1, "Delete from heap...");	a[0] = a[a.length-1];	/*-*/frame.Highlight(line_num+1);	int[] result = setHeapWithSize(a, a.length-1);	/*-*/frame.Highlight(line_num+2);	/*-*/if (result.length>0) heap.moveLast2First();	/*-*/heap.setHeap(result);	/*-*/frame.Highlight(line_num+3);	if (result.length > 0) heapify(result, 1);	/*-*/frame.Highlight(line_num+3);	/*-*/frame.Highlight(line_num+4);	return result;    }    public void heapify(int[] a, int i) { /*-*/int line_num = 39;	/*-*/frame.setText(1, "Heapifying ...");	/*-*/frame.Highlight(line_num);heap.highlight(i-1);heap.redraw();	int l = left(i);/*-*/frame.Highlight(line_num+1);	int r = right(i);/*-*/frame.Highlight(line_num+2);	/*-*/frame.setText(1, "Left node = " + l + "; Right node = " + r);	int largest;	/*-*/frame.Highlight(line_num+4);heap.highlight(l-1);heap.redraw();	if ( l <= heapSize(a) && a[l-1] > a[i-1] ) {	    largest = l;	    /*-*/frame.Highlight(line_num+5);	    /*-*/frame.setText(2, "Left node is the largest...");	} else {	    /*-*/frame.Highlight(line_num+6);	    largest = i;	    /*-*/frame.setText(2, "Current node is the largest...");	    /*-*/frame.Highlight(line_num+7);	    /*-*/frame.Highlight(line_num+8);	}	/*-*/heap.restore(l-1);	/*-*/frame.Highlight(line_num+9);heap.highlight(r-1);heap.redraw();	if ( r <= heapSize(a) && a[r-1] > a[largest-1] ) {	    /*-*/frame.Highlight(line_num+10);	    largest = r;	    /*-*/frame.setText(2, "Right node is the largest now...");	}	/*-*/heap.restore(r-1);heap.redraw();	/*-*/frame.Highlight(line_num+12);	if (largest != i) {	    // exchange a[i], a[largest]	    /*-*/frame.setText(1, "Current node is not the largest...");	/*-*/frame.setText(2, "Exchanging current node with the largest...");	    /*-*/frame.Highlight(line_num + 14);	    int tmp = a[i-1]; a[i-1] = a[largest-1]; a[largest-1] = tmp;	    /*-*/frame.Highlight(line_num+15);	    /*-*/heap.highlight(largest-1);heap.redraw();	    /*-*/heap.exchangeArrow(i-1, largest-1);	    /*-*/heap.setNode(i-1, a[i-1]);	    /*-*/heap.setNode(largest-1, a[largest-1]);	    /*-*/heap.restore(i-1); heap.restore(largest-1); heap.redraw();	    /*-*/frame.setText(2, "Heapifying the exchanged node...");	    heapify(a, largest);	    /*-*/frame.Highlight(line_num+15);	}	/*-*/heap.restore(i-1);heap.redraw();    }    public int heapSize(int[] a) {	return a.length;    }    public int parent(int i) {	return (i/2);    }    public int left(int i) {	return (2*i);    }    public int right(int i) {	return (2*i + 1);    }//----    public void run() {	heap.initHeap();	animatePriorityQueue();        // finish sorting        frame.finishAlg();    }    public void restoreDrawingPanelColor() {        //drawingPanel.restoreBinColor();        frame.repaint();    }}

⌨️ 快捷键说明

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