示例#1
0
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);
	}
}
示例#3
0
void consumidor(int *id) {
    double x = 0;
    while(1) {
        x = retirar();
        printf("Proc: %d - Valor retirado do buffer: %lf\n", *id, x);
    }
}
示例#4
0
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);

}
示例#5
0
// ----------------------------------------------------------
// - 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');
    // ....
}
示例#6
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;
				}
			}
		}
	}
}
示例#7
0
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;
		  }
	  }
	}
}
示例#8
0
void Lista::limpar() {
    while (!listaVazia())
        retirar();
}