Ideas de resolución de problemas:
A partir de una lista única, la ordenación por inserción, tiempo de espera.
Cambiar a construir una pequeña pila superior.
Después de ajustar los datos se inserta hacia arriba dentro de la pequeña pila superior, la parte superior de los elementos de la pila de salida, el nodo raíz ajuste a la baja a una pequeña parte superior pila
#include <stdio.h> #include < string .h> #include <malloc.h> #define MAX 11 typedef struct { int ID; Char s [MAX]; Msg}; Msg H [ 100,001 ]; void AdjustUp (Msg H [], int k) {//向上调整成小顶堆 H [ 0 ] = H [k]; int i = k / 2 ; mientras que (i> 0 && H [i] .ID> H [ 0 ] .ID) { H [k] = H [i]; k = i; i = k / 2 ; } H [k] = H [ 0 ]; } Void AdjustDown (Msg H [], int k, int n) {//向下调整成小顶堆 H [ 0 ] = H [k]; int i; para (i = k * 2 ; i <= n; i * = 2 ) { si (i <n && H [i] .ID> H [i + 1 ] .ID) i ++ ; si (H [ 0 ] .ID <= H [i] .ID) descanso ; más { H [k] = H [i]; K = I; } } H [K] = H [ 0 ]; } int K = 0 ; void PUT () {// de datos insertada int X; Char C [MAX]; Scanf ( " % S% D " , C , y X); H [ ++ K] .ID = X; strcpy (H [k] .s, C); AdjustUp (H, K); } void GET () {// Obtener el elemento de la pila superior IF (K ) { Msg tmp = H [ 1. ]; // parte superior de la posición de cambio de elemento de la pila y el último elemento, entonces la salida del último elemento H [ . 1] =H [K]; H [K] = tmp; el printf ( " % S \ n- " , H [K] .s); K - ; AdjustDown (H, . 1 , K); // a raíz abajo ajustado a una pequeña pila superior } del otro el printf ( " EMPTY COLA \ n-! " ); } int main () { int n-; Scanf ( " % D " , y n-); int I, X; Char C [MAX]; para (i = 0 ; I <n-; I ++ ) { Scanf ( "% s"C); si (! Strcmp (c, " PUT " )) { put (); } demás si ! (Strcmp (c, " GET " )) { get (); } } regresan 0 ; }