Максимальный стек
Самая большая куча заключается в том, что родительский элемент больше, чем дочерний элемент, и является полностью бинарным деревом.
Данные [1] начинают сохранять, данные [0] пусты и не используются. Вы также можете использовать данные [0] в качестве размера.
Общедоступный класс Maxheap <T расширяет сопоставимо <? Super t >> {private t [] data; private int size; private int емкости; public maxHeap (int емко) {this.data = (t []) Новая сопоставимая [емкость + 1]; size = 0; this.capacity = емкость;} public int size () {return this.size;} public boolean isempty () {return inte size == 0;} public public this.capacity;}/** * @return Просмотреть максимальный корень (см. только без удаления, по сравнению с Popmax) */public t extmax () {return data [1];} public void swap (int i, int j) {if (i! = j) {t temp = data [i]; [i] = data [j]; {size ++; data [size] = item; shiftup (size);}/*** @return pop максимальный корень (Endage Endage Endage, по сравнению с SeekMax)*/public t popmax () {swap (1, размер-); Shiftdown (1); вернуть данные [size+1];}/** @param Child. * / public void shiftup (int child) {while (gild> 1 && data [child] .compareto (data [child / 2])> 0) {swap (child, child / 2); Child = child / 2;}} / *** @param Нижний угловой отметок элемента в массиве данных. max (int a, int b) {if (data [a] .compareto (data [b]) <0) {// Если данные [b] Большой возврат b; // return b} else {// если данные [a] Большой возврат a; // return a}}/*** @param нижний угловой отметок в нижнем углу. В массиве данных*@return возвращайте нижний угловой отметок которого большой элемент*/private int max (int a, int b, int c) {int max = max (a, b); самый большой = макс (самый большой, c); вернуться больше;}/***@param Отец. отец) {while (true) {int lchild = отец * 2; // Left Child int rchild = отец * 2 + 1; // Правый ребенок int newfather = отец; // newfather собирается быть обновленным. Кто является нижним углом родителя, левого и правого узлов? If (lchild> size) {// Если у узела отца нет ни левого ребенка, ни возвращения правого ребенка;} else if (rchild> size) {// Если у узела отца есть только левый ребенок, нет правого ребенка, новичка = макс (отец, lChild);} els == Отец) {// Это означает, что отец больше, чем оба узла дочерних, и имя таблицы уже является большой корневой кучей, поэтому нет необходимости продолжать регулировать возврат;} else {// В противном случае вам нужно продолжать регулировать кучу, пока условие большого корня не соблюдает обновление значения. Shiftdown (newfather)}}} public static void main (string [] args) {// Создать большую корневую кучу maxHeap <Integer> maxheap = new maxheap <Integer> (100); // Сохранить для (int i = 0; i+++) {maxheap.insert (int) (int) (int) () * 100); Integer [] arr = new Integer [100]; // выбирать из кучи и положить его в массив для (int i = 0; i <100; i ++) {arr [i] = maxHeap.popmax (); System.out.print (arr [i]+"");} System.out.println ();}}}}}}}}}Функция максимальной кучи: shiftdown () отличается от вышеупомянутого
Общедоступный класс Maxheap <T расширяет сопоставимо <? Super t >> {private t [] data; private int size; private int емкость; public maxHeap (int емкость) {data = (t []) new Comparable [емкость + 1]; this.capacity = емкость; size = 0;} public int size () {return size;} public boolean isempty () {return size == 0;} public viser (t item) {data + 1] {data + 1] {data + 1] {data + 1] 1; item; size ++; shiftup (size);}/** * @return pop max root (делеция всплывающего окна означает по сравнению с Seekmax) */public t popmax () {t ret = data [1]; swap (1, size); size-; shiftdown (1); return ret;}/** @return View root Maximum root (Only Deletion, по сравнению с Popax/** (retural-antemax/ubutex/** (return-alemax * (returax/** (returantmax/ubitam () * ** * data [1];} public void swap (int i, int j) {if (i! = j) {t temp = data [i]; data [i] = data [j]; data [j] = temp;}} public void shiftup (int k) {while (k> 1 && data [k / 2] .compareto (k]) <0). 2;}} public void shiftdown (int chather) {while (2 * отец <= size) {int newfather = 2 * отец; if (newfather + 1 <= size && data [newfather + 1] .compareto (data [newfather])> 0) {// data [j] [j + 1] The One Take the Newfather = newfather + 1; (data [отец] .compareto (data [newfather])> = 0) {break;} else {swap (отец, newfather); // Значение обменивается отца = newfather; // newfath Maxheap <Integer> maxheap = new maxheap <Integer> (100); // save for (int i = 0; i <100; i ++) {maxheap.insert ((int) (math.random () * 100));} // Создать массив Integer [] arr = integer [100];//wep heap it integer [] arr = rantger [100]; 100;Суммировать
Выше приведено пример максимального кода реализации языка Java, и я надеюсь, что он будет полезен для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!