Experimento Avanzado 4-3.2 cola de mensajes de Windows (25 puntos) - reactor construido

 

 

 

 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 ; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/snzhong/p/12450897.html
Recomendado
Clasificación