void cambio (pagina *p,pagina *q,pagina *r,int i,int x) { int k,t; if (x > r->info [r->cont - 1]) { t = q->info [i]; retirar (q,i); k = 0; insertar (p,t,&k); t = r->info [r->cont - 1]; retirar (r, r->cont - 1); k = i; if (k == -1) k = 0; insertar (q,t,&k); } else { t = q->info [i]; retirar (q, i); k = p->cont - 1; if (k == -1) k = 0; insertar (p,t,&k); t = r->info [0]; retirar (r, 0); k = i; if (q->cont != 0) if (k > q->cont - 1) k = q->cont -1; insertar (q,t,&k); } }
void ejecutarIO(tipoDispositivo* dispositivo){ while (1){ tipoProcesoEnIO* procesoEnIO = retirar(dispositivo->colaDeIO); log_debug(logDebug,"Se ejecutara la operacion de IO para el proceso %d",(procesoEnIO->proceso)->PCB.identificador); milisleep(dispositivo->valorDeRetardo*procesoEnIO->cantidadUnidadesDeIO); encolar(colaProcesosListos,procesoEnIO->proceso); } }
void consumidor(int *id) { double x = 0; while(1) { x = retirar(); printf("Proc: %d - Valor retirado do buffer: %lf\n", *id, x); } }
main(){ PEDIDO zero = {"Acapulco", 01, 100}; PEDIDO um = {"Bruxelas", 02, 200}; PEDIDO dois = {"Cairo", 03, 300}; TFila fila; fila.inicio = fila.fim = 0; fila.contador = 0; inserir (&fila, zero); inserir (&fila, um); inserir (&fila, dois); mostra(fila); retirar (&fila); mostra(fila); }
// ---------------------------------------------------------- // - função principal // ---------------------------------------------------------- main(void) { int opc, numero; char aux[51]; char pa[20]; iniLista = NULL; fimLista = NULL; do { printf("\nLista Funcionarios --> Opcoes:"); printf("\n1 --> Inserir "); printf("\n2 --> lista todos os concorrentes"); printf("\n3 --> lista por Modalidade"); printf("\n4 --> Alterar modalidade"); printf("\n5 --> Remover concorrente"); printf("\n6 --> Remover pais"); printf("\n7 --> Inserir novo concorrente"); printf("\n0 --> Sair\n"); fflush(stdin); opc=getchar(); switch (opc) { case '1' : printf("\nIntroduza a informação do concorrente:\n"); inserir(); break; case '2' : if (iniLista != NULL) { lista(); } else { printf("\nA Lista esta vazia"); getchar(); } break; case '3' : if (iniLista != NULL) { printf("\nIntroduza o modalidade: "); fflush(stdin); gets(aux); listaModalidade(aux); } else { printf("\nA Lista esta vazia"); getchar(); } break; case '4' : printf("\nIntroduza o nome do concorrente:"); fflush(stdin); gets(aux); altera(aux); break; case '5' : printf("\nIntroduza o numero de inscrição a remover:"); scanf("%d", &numero); retirar(numero); break; case '6' : printf("\nÎntroduza o pais a remover : "); fflush(stdin); gets(pa); removerpais(pa); break; case '7' : inseriordenado(); break; } } while (opc != '0'); // .... }
void retira_b (pagina **raiz, int x, int *s) { int posicion, i, k; pagina *p, *q, *r, *t; LIFO1 pila; void init1_pila (struct LIFO1 *p); int pila1_vacia (struct LIFO1 *p); void ins1_pila (struct LIFO1 *p,pagina *s,int i); void retira1_pila (struct LIFO1 *p,pagina **s,int *i); *s = 1; init1_pila (&pila); esta (*raiz, x, &posicion, &pila); if (posicion == -1) *s = 0; /* La llave no existe en el arbol */ else { retira1_pila (&pila, &p, &i); if (!hoja (p)) { t = p; k = i; ins1_pila (&pila, p, i+1); p = p->apunt [i+1]; while ( p != NULL) { ins1_pila (&pila, p, 0); p = p->apunt [0]; } retira1_pila (&pila, &p, &i); t->info [k] = p->info [0]; x = p->info [0]; posicion = 0; } if (p->cont > N) retirar (p, posicion); else { if (!pila1_vacia (&pila)) { retira1_pila (&pila, &q, &i); if (i < q->cont) { r = q->apunt [i+1]; if (r->cont > N) { retirar (p, posicion); cambio (p, q, r, i, x); } else { if (i != 0) { r = q->apunt [i-1]; if (r->cont > N) { retirar (p, posicion); cambio(p,q,r,i-1,x); } else unir (raiz,q,r,p, i-1,pila,x,posicion); } else unir (raiz,q,r,p,i,pila, x,posicion); } } else { r = q->apunt [i-1]; if (r->cont > N) { retirar (p, posicion); cambio (p,q,r,i-1,x); } else unir (raiz,q,r,p,i-1,pila, x, posicion); } } else { retirar (p, posicion); if (p->cont == 0) { free (*raiz); *raiz = NULL; } } } } }
void unir (pagina **raiz, pagina *q, pagina *r, pagina *p, int i, LIFO1 pila, int x, int posicion) { int terminar = 0,j, k; pagina *t; retirar (p, posicion); if (x < r->info [0]) { t = p; p = r; r = t; } while (terminar == 0) { if (r->cont < N && p->cont > N) { cambio (r, q, p, i, x); r->apunt [r->cont] = p->apunt [0]; cizquierda_apunt (p, 0, p->cont + 1); terminar = 1; } else if (p->cont < N && r->cont > N) { cambio (p, q, r, i, x); cderecha_apunt (p, 0); p->apunt [0] = r->apunt [r->cont + 1]; r->apunt [r->cont + 1] = NULL; terminar = 1; } else { j = r->cont; r->info [j++] = q->info [i]; k = 0; while (k <= p->cont - 1) r->info [j++] = p->info [k++]; r->cont = j; retirar (q, i); k = 0; j = M - p->cont; while (p->apunt [k] != NULL) r->apunt [j++] = p->apunt [k++]; free (p); if (q->cont == 0) { q->apunt [i+1] = NULL; if (pila1_vacia (&pila) ) { free (q); q = NULL; } } else cizquierda_apunt (q, i+1, q->cont+1); if (q != NULL) if (q->cont >= N) terminar = 1; else { t = q; if (!pila1_vacia (&pila) ) { retira1_pila (&pila, &q, &i); if (x >= q->info [0]) { p = t; r = q->apunt [i-1]; i--; } else { r = t; p = q->apunt [i+1]; } } else terminar = 1; } else { terminar = 1; *raiz = r; } } } }
void Lista::limpar() { while (!listaVazia()) retirar(); }