Sie sind auf Seite 1von 33

Algoritmos

Pg. 1 de 33

ALGORITMOS DE ORDENAMIENTO funcin: burbuja recibe: arr[], ultind regresa: nada i = ultind mientras i > 0 j=0 mientras j < i arr[j] > arr[j + 1]? S: intercambiar arr[i] arr[i + 1] j=j+1 fin mientras i=i1 fin mientras funcin burbuja bidireccional recibe: arr[], ultind regresa: nada i=0 j = ultind hacer: bandera = 0 x=i mientras x < j arr[x] > arr[x + 1]? S: intercambiar arr[x] arr[x + 1] bandera = 1 x=x+1 fin mientras funcin: burbuja mejorada recibe: arr[], ultind regresa: nada i = ultind hacer: bandera = 0 j=0 mientras j < i arr[j] > arr[j + 1]? S: intercambiar arr[i] arr[i + 1] bandera = 1 j=j+1 fin mientras i=i1 mientras bandera = 1 j=j1 x=j mientras x > i arr[x] < arr[x 1]? S: intercambiar arr[x] arr[x 1] bandera = 1 x=x1 fin mientras i=i1 mientras bandera = 1

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 2 de 33

funcin: burbuja bidireccional simultneo recibe: arr[], ultind regresa: nada i=0 j = ultind hacer: bandera = 0 x=i z=j mientras x < j arr[x] > arr[x + 1]? S: intercambiar arr[x] arr[x + 1] bandera = 1 arr[z] < arr[z 1]? S: intercambiar arr[z] arr[z 1] bandera = 1 x=x+1 z=z1 fin mientras i=i+1 j=j1 mientras bandera = 1

funcin: insercin recibe: arr[], ultind regresa: nada i=1 mientras i ultind aux = arr[i] j=i mientras j > 0 y aux < arr[j 1] arr[j] = arr[j 1] j=j1 fin mientras i j? S: arr[j] = aux i=i+1 fin mientras

funcin: seleccin recibe: arr[], ultind regresa: nada i=0 mientras i < ultind menor = i j=i+1 mientras j ultind arr[j] < arr[menor]? S: menor = j j=j+1 fin mientras menor i? S: intercambiar arr[i] arr[menor] i=i+1 fin mientras

funcin: shell recibe: arr[], ultind regresa: nada fact = 2/3 dif = ultind x fact mientras dif > 0 i=0 mientras i <= ultind dif arr[i] > arr[i + dif]? S: intercambiar arr[i] arr[i + dif] i=i+1 fin mientras dif = dif * fact fin mientras

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 3 de 33

funcin: mezcla recibe: arr[], extizq, extder regresa: nada extizq extder? S: terminar medio =(extizq + extder) / 2 llamar: mezcla arr, extizq, medio llamar: mezcla arr, medio + 1, extder temp[extizq .. extder] = arr[extizq .. extder] i = extizq j = medio + 1 x = extizq mientras i medio y j extder mientras i medio y temp[i] temp[j] arr[x] = temp[i] i=i+1 x=x+1 fin mientras i medio? S: mientras j extder y temp[j] temp[i] arr[x] = temp[j] j=j+1 x=x+1 fin mientras fin mientras mientras i medio arr[x] = temp[i] i=i+1 x=x+1 fin mientras mientras j extder arr[x] = temp[j] j=j+1 x=x+1 fin mientras

funcin: quicksort recibe: arr[], extizq, extder regresa: nada extizq extder? S: terminar piv = (extizq + extder) / 2 intercambiar arr[piv] arr[extder] mientras i < j mientras i < j y arr[i] arr[ed] i=i+1 fin mientras mientras i < j y arr[j] arr[ed] j=j+1 fin mientras i j? S: intercambiar arr[i] arr[j] fin mientras i ed? S: intercambiar arr[i] arr[ed] llamar: quicksort arr, extizq, i 1 llamar: quicksort arr, i + 1, extder

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 4 de 33

ALGORITMOS DE BSQUEDA funcin: bsqueda lineal recibe: elem, arr[], ultind regresa: posicin i=0 mientras i ultind elem = arr[i]? S: regresar: i terminar i=i+1 fin mientras regresar: 1 funcin: bqueda binaria recibe: elem, arr[], ultind regresa: posicin i=0 j = ultind mientras i j medio =(i + j) / 2 arr[m] = elem? S: regresar: medio terminar elem < arr[medio]? S: j = medio 1 No: i = medio + 1 fin mientras regresar: 1

funcin: bsqueda binaria recursiva recibe: elem, arr[], extizq, extder regresa: posicin extizq > extder? S: regresar: 1 terminar medio = (extizq + extder) / 2 arr[medio] = elem? S: regresar: medio terminar No: elem < arr[medio]? S: regresar: llamar: bsqueda binaria recursiva(elem, arr, extizq, medio 1) No: regresar: llamar: bsqueda binaria recursiva(elem, arr, medio + 1, extder)

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 5 de 33

ALGORITMOS DE LISTAS Implementacin con Arreglos

funcin: inicializa recibe: lista(datos[], ltimo) regresa: nada ltimo = 1

funcin: elimina recibe: pos, lista(datos[], ltimo) regresa: nada vaca(lista) pos < 0 pos > ltimo? S: desplegar mensaje de error terminar i = pos mientras i < ltimo datos[i] = datos[i + 1] i=i+1 fin mientras ltimo = ltimo 1

funcin: vaca recibe: lista(datos[], ltimo) regresa: booleano ltimo = 1? S: regresar: verdadero No: regresar: falso

funcin: llena recibe: lista(datos[], ltimo) regresa: booleano ltimo = tamao_del_arreglo 1? S: regresar: verdadero No: regresar: falso

funcin: primero recibe: lista(datos[], ltimo) regresa: posicin vaca(lista)? S: regresar: 1 N: regresar: 0

funcin: inserta recibe: elem, pos, lista(datos[], ltimo) regresa: nada llena(lista) pos < 0 pos > ltimo + 1? S: desplegar mensaje de error terminar i = ltimo + 1 mientras i > pos datos[i] = datos[i 1] i=i1 fin mientras datos[p] = elem ltimo = ltimo + 1

funcin: ltimo recibe: lista(datos[], ltimo) regresa: posicin regresar: ltimo

funcin: anterior recibe: pos, lista(datos[], ltimo) regresa: posicin vaca(lista) pos < 1? S: regresar: 1 N: regresar: pos 1

funcin: siguiente recibe: pos, lista(datos[], ltimo) regresa: posicin vaca(lista) pos > ltimo 1? S: regresar: 1 No: regresar: pos + 1

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 6 de 33

funcin: localiza recibe: elem, lista(datos[], ltimo) regresa: posicin regresar: llamar: bsqueda lineal(datos, ltimo) <vase bsquedas>

funcin: imprime recibe: lista(datos[], ltimo) regresa: nada i=0 mientras i ltimo imprimir: datos[i]

funcin: recupera recibe pos, lista(datos[], ltimo) regresa: elemento vaca(lista) pos < 0 pos > ltimo? S: Error de excepcin! Insuficiencia de datos Terminar No: regresar: datos[pos]

funcin: anula recibe: lista(datos[], ltimo) regresa: nada ltimo = 1

funcin: ordena recibe: lista(datos[], ltimo) regresa: nada llamar: quicksort(datos, 0, ltimo)<vase ordenamientos>

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 7 de 33

ALGORITMOS DE PILAS Implementacin con Arreglos

funcin: inicializa recibe: pila(datos[], tope) regresa: nada tope = 1

funcin: pop recibe: pila(datos, tope) regresa: elemento vaca(pila)? S: Desplegar mensaje de error, insuficiencia de datos Terminar No: tope = tope 1

funcin: vaca recibe: pila(datos[], tope) regresa: booleano tope = 1? S: regresar: verdadero No: regresar: falso

funcin: top recibe: pila(datos, tope) regresa: elemento vaca(pila)? S: Error de excepcin! Insuficiencia de datos Terminar No: regresar: datos[tope]

funcin: llena recibe: pila(datos[], tope) regresa: booleano tope = tamao_del_arreglo 1? S: regresar: verdadero No: regresar: falso

funcin: push recibe: elem, pila(datos[], tope) regresa: nada llena(pila)? S: Desplegar mensaje de error, desbordamiento de datos Terminar No: tope = tope + 1 datos[tope] = elem

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 8 de 33

ALGORITMO DE CONVERSIN DE EXPRESIONES EN NOTACIN INFIJA A SU EQUIVALENTE EN NOTACIN POSFIJA

funcin: infija_a_posfija recibe: expr_infija[] regresa: expr_posfija[] i=0 j=0 hacer: segn sea el caso: caso: expr_infija[i] es operando expr_posfija[j] = expr_infija[i]; j=j+1 caso: expr_infija[i] = '(' push(expr_infija[i], pila) caso: expr_infija[i] = ')' mientras no vaca(pila) y top(pila) '(' expr_posfija[j] = top(pila) j=j+1 pop(pila) fin mientras pop(pila) caso: expr_infija[i] es operador mientras no vaca(pila) y top(pila) '(' y precedencia(top(pila)) precedencia(expr_infija[i]) expr_posfija[j] = top(pila) j=j+1 pop(pila) fin mientras push(expr_infija[i], pila) caso: expr_infija[i] es fin_de_cadena mientras no vaca(pila) expr_posfija[j] = top(pila) j=j+1 pop(pila) fin mientras regresar: expr_posfija terminar fin de casos i=i+1 mientras 1 = 1

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 9 de 33

ALGORITMO DE TORRES DE HANOI

funcin: hanoi recibe: pilaOrig, pilaDest, pilaAux, numdiscos regresa: nada numdiscos = 0? S=> terminar hanoi (pilaOrig, pilaAux, pilaDest, numdiscos 1) push (top (pilaOrig), pilaDest) pop (pilaOrig) hanoi (pilaAux, pilaDest, pilaOrig, numdiscos 1)

Torres de Hanoi

Estado inicial n discos en poste origen Paso 1: pasar n-1 discos del poste origen al poste auxiliar Paso 2: pasar 1 disco del poste origen al poste destino Paso 3: pasar n-1 discos del poste auxiliar al poste destino

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 10 de 33

ALGORITMOS DE COLAS Implementacin con Arreglos

funcin: inicializa recibe: cola(datos[], frente, final) regresa: nada frente = 0 final = tamao_del_arreglo 1

funcin: dequeue recibe: cola(datos[], frente, final) regresa: nada vaca(cola)? S: Tesplegar mensaje de error por insuficiencia de datos Terminar No: frente = frente + 1 frente = tamao_del_arreglo? S: frente = 0

funcin: vaca recibe: cola(datos[], frente, final) regresa: booleano (frente = final + 1) (frente = 0 y final = tamao_del_arreglo 1)? S: regresar: verdadero No: regresar: falso

funcin: front recibe: cola(datos[], frente, final) regresa: elemento vaca(cola)? S: Error de excepcin por insuficiencia de datos! Terminar No: regresar: datos[frente]

funcin: llena recibe: cola(datos[], frente, final) regresa: booleano (frente = final + 2) (frente = 0 y final = tamao_del_arreglo 2) (frente = 1 y final = tamao_del_arreglo 1)? S: regresar: verdadero No: regresar: falso

funcin: enqueue recibe: cola(datos[], frente, final) regresa: nada llena(cola)? S: Desplegar mensaje por error de desbordamiento de datos Terminar No: final = final + 1 final = tamao_del_arreglo? S: final = 0 datos[final] = elem

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 11 de 33

ALGORITMOS DE LISTAS Lista Simplemente Ligada Lineal Sin Encabezado LSLLSE

funcin: inicializa recibe: lista regresa: nada lista = NULO

regresa: posicin vaca(lista)? S: regresar: NULO terminar aux = lista mientras auxsig NULO aux = auxsig fin mientras regresar: aux

funcin: vaca recibe: lista regresa: booleano lista = NULO? S: regresar: verdadero No: regresar: falso

funcin: inserta recibe: elem, pos, lista regresa: nada aux = nuevo nodo auxelem = elem pos = NULO? S: auxsig = lista lista = aux No: auxsig = possig possig = aux

funcin. anterior recibe: pos, lista regresa: posicin vaca(lista) pos = NULO? S: regresar: NULO terminar aux = lista mientras aux NULO y auxsig pos aux = auxsig fin mientras regresar: aux

funcin: elimina recibe: pos, lista regresa: nada vaca(lista) pos = NULO? S: terminar pos = lista? S: lista = listasig No: anterior(pos, lista)sig = possig liberar espacio de memoria de pos

funcin: siguiente recibe: pos, lista regresa: posicin vaca(lista) pos = NULO? S: regresar: NULO terminar regresar: possig

funcin: primero recibe: lista regresa: posicin regresar: lista

funcin: ltimo recibe: lista


2006 M.S.I. Alfredo Gutirrez Hernndez alfredogtzh@gmail.com

Algoritmos

Pg. 12 de 33

funcin: localiza recibe: elem, lista regresa: posicin aux = lista mientras aux NULO y auxelem elem aux = auxsig fin mientras regresar: aux

funcin: ordena recibe: lista regresa: nada num_elementos = 0 aux = lista mientras aux NULO num_elementos = num_elementos + 1 aux = auxsig fin mientras crear un arreglo de punteros a nodos: punteros[num_elementos] aux = lista contador = 0 mientras aux NULO punteros[contador] = aux aux = auxsig contador = contador + 1 fin mientras ordenar(punteros) contador = 0 mientras contador < num_elementos 1 punteros[contador]sig = punteros[contador + 1] contador = contador + 1 fin mientras punteros[num_elementos 1]sig = NULO lista = punteros[0] liberar espacio de memoria de punteros

funcin: recupera recibe pos, lista regresa: elemento vaca(lista) pos = NULO? S: error de excepcin! Insuficiencia de datos terminar No: regresar: poselem

funcin: imprime recibe: lista regresa: nada aux = lista mientras aux NULO imprimir auxelem aux = auxsig fin mientras

funcin: anula recibe: lista regresa: nada mientras lista NULO aux = lista lista = listasig liberar espacio de memoria de aux fin mientras

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 13 de 33

ALGORITMOS DE LISTAS Lista Simplemente Ligada Circular Sin Encabezado LSLLCSE

funcin: inicializa recibe: lista regresa: nada lista = NULO

regresa: posicin regresar: lista

funcin: vaca recibe: lista regresa: booleano lista = NULO? S: regresar: verdadero No: regresar: falso

funcin: ltimo recibe: lista regresa: posicin vaca(lista)? S: regresar: NULO terminar aux = lista mientras auxsig lista aux = auxsig fin mientras regresar: aux

funcin: inserta recibe: elem, pos, lista regresa: nada aux = nuevo nodo auxelem = elem vaca(lista)? S: auxsig = aux lista = aux No: pos = NULO? S: auxsig = lista ultimo(lista)sig = aux lista = aux No: auxsig = possig possig = aux

funcin. anterior recibe: pos, lista regresa: posicin vaca(lista) pos = NULO? S: regresar: NULO terminar aux = lista mientras auxsig pos aux = auxsig fin mientras regresar: aux

funcin: elimina recibe: pos, lista regresa: nada vaca(lista) pos = NULO? S: terminar possig = pos? S: lista = NULO No: pos = lista? S: ultimo(lista)sig = listasig lista = listasig No: anterior(pos, lista)sig = possig liberar espacio de memoria de pos

funcin: siguiente recibe: pos, lista regresa: posicin vaca(lista) pos = NULO? S: regresar: NULO terminar regresar: possig

funcin: primero recibe: lista


2006 M.S.I. Alfredo Gutirrez Hernndez alfredogtzh@gmail.com

Algoritmos

Pg. 14 de 33

funcin: localiza recibe: elem, lista regresa: posicin vaca(lista)? S: regresar: NULO aux = lista hacer: auxelem = elem? S: regresar: aux salir aux = auxsig mientras aux lista regresar: NULO

funcin: anula recibe: lista regresa: nada vaca(lista)? S: terminar marca = lista hacer: aux = lista lista = listasig liberar espacio de memoria de aux mientras lista marca lista = NULO

funcin: recupera recibe pos, lista regresa: elemento vaca(lista) pos = NULO? S: error de excepcin! Insuficiencia de datos terminar No: regresar: poselem

funcin: ordena recibe: lista regresa: nada num_elementos = 0 aux = lista hecer: num_elementos = num_elementos + 1 mientras aux lista crear un arreglo de punteros a nodos: punteros[num_elementos] aux = lista contador = 0 hacer: punteros[contador] = aux aux = auxsig contador = contador + 1 mientras aux lista ordenar(punteros) contador = 0 mientras contador < num_elementos 1 punteros[contador]sig = punteros[contador + 1] contador = contador + 1 fin mientras punteros[num_elementos 1]sig = punteros[0] lista = punteros[0] liberar espacio de memoria de punteros

funcin: imprime recibe: lista regresa: nada vaca(lista)? S: terminar aux = lista hacer: imprimir auxelem aux = auxsig mientras aux lista

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 15 de 33

ALGORITMOS DE LISTAS Lista Doblemente Ligada Lineal Sin Encabezado LDLLSE

funcin: inicializa recibe: lista regresa: nada lista = NULO

funcin: elimina recibe: pos, lista regresa: nada vaca(lista) pos = NULO? S: terminar posant NULO? S: posantsig = possig possig NULO? S: possigant = posant pos = lista? S: lista = listasig liberar espacio de memoria de pos

funcin: vaca recibe: lista regresa: booleano lista = NULO? S: regresar: verdadero No: regresar: falso

funcin: inserta recibe: elem, pos, lista regresa: nada aux = nuevo nodo auxelem = elem pos = NULO? S: auxant = NULO auxsig = lista lista NULO? S: listaant = aux lista = aux No: auxant = pos auxsig = possig possig NULO? S: possigant = aux possig = aux

funcin: primero recibe: lista regresa: posicin regresar: lista

funcin: ltimo recibe: lista regresa: posicin vaca(lista)? S: regresar: NULO terminar aux = lista mientras auxsig NULO aux = auxsig fin mientras regresar: aux

funcin. anterior recibe: pos, lista regresa: posicin vaca(lista) pos = NULO? S: regresar: NULO terminar regresar: posant

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 16 de 33

funcin: siguiente recibe: pos, lista regresa: posicin vaca(lista) pos = NULO? S: regresar: NULO terminar regresar: possig

funcin: ordena recibe: lista regresa: nada num_elementos = 0 aux = lista mientras aux NULO num_elementos = num_elementos + 1 aux = auxsig fin mientras crear un arreglo de punteros a nodos: punteros[num_elementos] aux = lista contador = 0 mientras aux NULO punteros[contador] = aux aux = auxsig contador = contador + 1 fin mientras ordenar(punteros)

funcin: localiza recibe: elem, lista regresa: posicin aux = lista mientras aux NULO y auxelem elem aux = auxsig fin mientras regresar: aux

funcin: recupera recibe: pos, lista regresa: elemento vaca(lista) pos = NULO? S: error de excepcin! Insuficiencia de datos terminar No: regresar: poselem

contador = 0 contra = num_elementos 1 mientras contador < num_elementos 1 punteros[contador]sig = punteros[contador + 1] punteros[contra]ant = punteros[contra 1] contador = contador + 1 contra = contra 1 fin mientras punteros[0]ant = NULO punteros[num_elementos 1]sig = NULO lista = punteros[0] liberar espacio de memoria de punteros

funcin: imprime recibe: lista regresa: nada aux = lista mientras aux NULO imprimir auxelem aux = auxsig fin mientras

funcin: anula recibe: lista regresa: nada mientras lista NULO aux = lista lista = listasig liberar espacio de memoria de aux fin mientras

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 17 de 33

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 18 de 33

ALGORITMOS DE LISTAS Lista Doblemente Ligada Circular Sin Encabezado LDLCSE

funcin: inicializa recibe: lista regresa: nada lista = NULO

funcin: elimina recibe: pos, lista regresa: nada vaca(lista) pos = NULO? S: terminar possig = pos? S: lista = NULO No: posantsig = possig possigant = posant pos = lista? S: lista = listasig liberar espacio de memoria de pos

funcin: vaca recibe: lista regresa: booleano lista = NULO? S: regresar: verdadero No: regresar: falso

funcin: inserta recibe: elem, pos, lista regresa: nada aux = nuevo nodo auxelem = elem vaca(lista)? S: auxsig = aux auxant = aux lista = aux No: pos = NULO? S: auxsig = lista auxant = ultimo(lista) ultimo(lista)sig = aux listaant = aux lista = aux No: auxant = pos auxsig = possig possigant = aux possig = aux

funcin: primero recibe: lista regresa: posicin regresar: lista

funcin: ltimo recibe: lista regresa: posicin vaca(lista)? S: regresar: NULO terminar regresar: listaant

funcin. anterior recibe: pos, lista regresa: posicin vaca(lista) pos = NULO? S: regresar: NULO terminar regresar: posant

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 19 de 33

funcin: siguiente recibe: pos, lista regresa: posicin vaca(lista) pos = NULO? S: regresar: NULO terminar regresar: possig

funcin: anula recibe: lista regresa: nada vaca(lista)? S: terminar marca = lista hacer: aux = lista lista = listasig liberar espacio de memoria de aux mientras lista marca

funcin: localiza recibe: elem, lista regresa: posicin vaca(lista)? S: regresar: NULO aux = lista hacer: auxelem = elem? S: regresar: aux salir aux = auxsig mientras aux lista regresar: NULO

funcin: ordena recibe: lista regresa: nada num_elementos = 0 aux = lista hecer: num_elementos = num_elementos + 1 mientras aux lista crear un arreglo de punteros a nodos: punteros[num_elementos] aux = lista contador = 0 hacer: punteros[contador] = aux aux = auxsig contador = contador + 1 mientras aux lista ordenar(punteros) contador = 0 contra = num_elementos 1 mientras contador < num_elementos 1 punteros[contador]sig = punteros[contador + 1] punteros[contra]ant = punteros[contra 1] contador = contador + 1 contra = contra 1 fin mientras punteros[num_elementos 1]sig = punteros[0] punteros[0]ant = punteros[num_elementos 1] lista = punteros[0] liberar espacio de memoria de punteros

funcin: recupera recibe pos, lista regresa: elemento vaca(lista) pos = NULO? S: error de excepcin! Insuficiencia de datos terminar No: regresar: poselem

funcin: imprime recibe: lista regresa: nada vaca(lista)? S: terminar aux = lista hacer: imprimir auxelem aux = auxsig mientras aux lista

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 20 de 33

ALGORITMOS DE PILAS Basados en la Lista Simplemente Ligada Lineal Sin Encabezado

funcin: inicializa recibe: pila regresa: nada pila = NULO

funcin: pop recibe: pila regresa: elemento vaca(pila)? S: terminar aux = pila pila = pilasig liberar espacio de memoria de aux

funcin: vaca recibe: pila regresa: booleano pila = NULO? S: regresar: verdadero No: regresar: falso

funcin: top recibe: pila regresa: elemento vaca(pila)? S: Error de excepcin! Insuficiencia de datos Terminar No: regresar: pilaelem

funcin: push recibe: elem, pila regresa: nada aux = nuevo nodo auxelem = elem auxsig = pila pila = aux

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 21 de 33

ALGORITMOS DE COLAS Basados en la Lista Simplemente Ligada Lineal Con Encabezado)

funcin: inicializa recibe: cola(frente, final) regresa: nada frente = NULO final = NULO

funcin: dequeue recibe: cola(frente, final) regresa: nada vaca(cola)? S: Insuficiencia de datos Terminar aux = frente frente = frentesig liberar espacio de memoria de aux

funcin: vaca recibe: cola(frente, final) regresa: booleano frente = NULO? S: regresar: verdadero No: regresar: falso

funcin: enqueue recibe: elemento, cola(frente, final) regresa: nada aux = nuevo nodo auxelem = elem auxsig = NULO final NULO? S: finalsig = aux final = aux frente = NULO? S: frente = aux

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 22 de 33

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 23 de 33

funcin: front recibe: cola(frente, final) regresa: elemento vaca(cola)? S: Error de excepcin! Insuficiencia de datos Terminar No: regresar: frenteelem

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 24 de 33

ALGORITMOS DE RBOLES BINARIOS

funcin: inicializa recibe: rbol regresa: nada rbol = NULO

funcin: localiza recibe: elem, rbol regresa: posicin rbol = NULO? S: devolver NULO terminar No: elem = rbolelem? S: devolver: rbol No: elem < rbolelem S: devolver: localiza(elem, rbolizq) No: devolver: localiza(elem, rbolder)

funcin: vaco recibe: rbol regresa: booleano rbol = NULO? S: devolver: verdadero No: devolver: falso

funcin: recupera recibe: pos, rbol regresa: elemento rbol = NULO pos = NULO? S: Error de excepcin! Insuficiencia de datos Terminar No: devolver: poselem

funcin: menor recibe: rbol regresa: posicin rbol = NULO? S: devolver: NULO terminar No: rbolizq = NULO? S: devolver: rbolizq No: devolver: menor(rbolizq)

funcin: inserta recibe: elem, rbol regresa: nada rbol = NULO? S: aux = nuevo nodo auxelem = elem rbol = aux No: elem < auxelem? S: inserta(rbolizq, elem) No: inserta(rbolder, elem)

funcin: mayor recibe: rbol regresa: posicin rbol = NULO? S: devolver: NULO terminar No: rbolder = NULO? S: devolver: rbolder No: devolver: mayor(rbolder)

funcin: es_hoja recibe: rbol regresa: booleano rbol = NULO? S: devolver: falso rbolizq = NULO y rbolder = NULO? S: devolver: verdadero

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 25 de 33

funcin: recorrido_preorder recibe: rbol regresa: nada rbol = NULO? S: terminar imprimir: rbolelem recorrido_preorder(rbolizq) recorrido_preorder(rbolder)

funcin: altura recibe: rbol regresa: entero rbol = NULO? S: devolver: 0 No: alt_izq = altura(rbolizq) alt_der = altura(rbolder) alt_izq > alt_der? S: devolver: alt_izq + 1 No: devolver: alt_der + 1

funcin: recorrido_inorder recibe: rbol regresa: nada rbol = NULO? S: terminar recorrido_inorder(rbolizq) imprimir: rbolelem recorrido_inorder(rbolder)

funcin: fact_eq recibe: rbol regresa: entero rbol = NULO? S: devolver: 0 No: devolver: altura(rbolder) altura(rbolizq)

funcin: recorrido_postorder recibe: rbol regresa: nada rbol = NULO? S: terminar recorrido_postorder(rbolizq) imprimir: rbolelem recorrido_postorder(rbolder)

funcin: balanceo recibe: rbol regresa: nada fact_eq(rbol) < 1? S: fact_eq(rbolizq) = 1? S: rot_sim_der(rbol) No: rot_dob_der(rbol) Terminar fact_eq(rbol) > 1? S: fact_eq(rbolizq) = 1? S: rot_sim_izq(rbol) No: rot_dob_izq(rbol) Terminar

funcin: elimina recibe: pos, rbol regresa: nada rbol = NULO pos = NULO? S:Desplegar mensaje de error Terminar eshoja(rbol)? S: liberar rbol rbol = NULO No: rbolizq NULO? S: pos_reemplazo = mayor(rbolizq) No: pos_reemplazo = menor(rbolder) rbolelem = pos_reemplazoelem elimina(pos_reemplazo, rbol)

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 26 de 33

funcin: rot_sim_der recibe: rbol regresa: nada rbol = NULO rbolizq = NULO rbolizqizq = NULO? S: terminar aux1 = rbolizq aux2 = rbolizqder rbolizq = aux2 aux1der = rbol rbol = aux1

funcin: rot_dbl_der recibe: rbol regresa: nada rbol = NULO rbolizq = NULO rbolizqder = NULO? S: terminar aux1 = rbolizq aux2 = aux1der aux3 = aux2izq aux4 = aux2der rbolizq = aux4 aux1der = aux3 aux2izq = aux1 rbol = aux2

funcin: rot_sim_izq recibe: rbol regresa: nada rbol = NULO rbolder = NULO rbolderder = NULO? S: terminar aux1 = rbolder aux2 = rbolderizq rbolder = aux2 aux1izq = rbol rbol = aux1

funcin: rot_dbl_izq recibe: rbol regresa: nada rbol = NULO rbolder = NULO rbolderizq = NULO? S: terminar aux1 = rbolder aux2 = aux1izq aux3 = aux2der aux4 = aux2izq rbolder = aux4 aux1izq = aux3 aux2der = aux1 rbol = aux2

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 27 de 33

ALGORITMOS DE GRAFOS Implementacin con Arreglos

funcin: inicializa recibe: grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada i=0 mientras i < tamao_del_arreglo vrtices[i].existe = falso j=0 mientras j < tamao_del_arreglo aristas[i][j] = falso j=j+1 fin mientras i=i+1 fin mientras

funcin: inserta_vrtice recibe: dato, grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada lleno(grafo)? S: desplegar mensaje de error terminar i=0 mientras vrtices[i].existe = verdadero i=i+1 fin mientras vrtices[i].existe = verdadero vrtices[i].dato = dato

funcin: vaco recibe: grafo (vrtices(existe, dato)[], aristas[][]) regresa: booleano i=0 mientras i < tamao_del_arreglo vrtices[i].existe = verdadero? S: regresar: falso i=i+1 fin mientras regresar: verdadero

funcin: localiza_vrtice recibe: dato, grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada i=0 mientras i < tamao_del_arreglo vrtices[i].existe = verdadero y vrtices[i].dato = dato? S: regresar: i i=i+1 fin mientras regresar: 1

funcin: lleno recibe: grafo (vrtices(existe, dato)[], aristas[][]) regresa: booleano i=0 mientras i < tamao_del_arreglo vrtices[i].existe = falso? S: regresar: falso i=i+1 fin mientras regresar: verdadero

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 28 de 33

funcin: elimina_vrtice recibe: dato, grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada posicin = localiza_vrtice(dato, grafo) posicin = 1? S: desplegar mensaje de error (el vrtice no existe) terminar vrtices[posicin].existe = falso i=0 mientras i < tamao_del_arreglo aristas[posicin][i] = falso aristas[i][posicin] = falso i=i+1 fin mientras

funcin: recorrido_anchura recibe: dato_orig, grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada pos_orig = localiza_vrtice(dato_orig, grafo) pos_orig = 1? S: desplegar mensaje de error (el vrtice no existe) terminar crear una COLA de nombre cola_destinos crear una LISTA de nombre visitados enqueue(pos_orig, cola_destinos) mientras NO vaca(cola_destinos) vrtice_actual = dequeue(cola_destinos) localiza_vrtice(vrtice_actual, visitados) = 1? S: realizar proceso con vrtice_actual insertar(vrtice actual, visitados) dest = 0 mientras dest < tamao_del_arreglo aristas[vrtice_actual][dest] = verdadero y localiza_vrtice(dest, visitados) = 1? S: enqueue(dest, cola_destinos) dest = dest + 1 fin mientras fin mientras

funcin: inserta_arista (dirigida) recibe: dato_orig, dato_dest, grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada pos_orig = localiza_vrtice(dato_orig, grafo) pos_dest = localiza_vrtice(dato_dest, grafo) pos_orig = 1 pos_dest = 1? S: desplegar mensaje de error (algn vrtice no existe) terminar aristas[pos_orig, pos_dest] = verdadero

funcin: elimina_arista (dirigida) recibe: dato_orig, dato_dest, grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada pos_orig = localiza_vrtice(dato_orig, grafo) pos_dest = localiza_vrtice(dato_dest, grafo) pos_orig = 1 pos_dest = 1? S: desplegar mensaje de error (algn vrtice no existe) terminar aristas[pos_orig, pos_dest] = falso

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 29 de 33

funcin: recorrido_profundidad recibe: dato_orig, grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada pos_orig = localiza_vrtice(dato_orig, grafo) pos_orig = 1? S: desplegar mensaje de error (el vrtice no existe) terminar crear una PILA de nombre pila_destinos crear una LISTA de nombre visitados push(pos_orig, pila_destinos) mientras NO vaca(pila_destinos) vrtice_actual = pop(cola_destinos) localiza_vrtice(vrtice_actual, visitados) = 1? S: realizar proceso con vrtice_actual dest = 0 mientras dest < tamao_del_arreglo aristas[vrtice_actual][dest] = verdadero y localiza_vrtice(dest, visitados) = 1? S: push(dest, pila_destinos) insertar(dest, visitados) dest = dest + 1 fin mientras fin mientras

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 30 de 33

funcin: ruta_primero_anchura recibe: dato_orig, dato_dest, grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada pos_orig = localiza_vrtice(dato_orig, grafo) pos_dest = localiza_vrtice(dato_orig, grafo) pos_orig = 1? S: desplegar mensaje de error (el vrtice no existe) terminar crear una COLA de nombre cola_destinos crear una LISTA de nombre visitados crear una PILA de nombre pila_ruta enqueue(pos_orig, cola_destinos) mientras NO vaca(cola_destinos) vrtice_actual = dequeue(cola_destinos) localiza_vrtice(vrtice_actual, visitados) = 1? vrtice_actual = pos_dest? S: desplegar resultado terminar insertar(vrtice_actual, visitados) dest = 0 mientras dest < tamao_del_arreglo aristas[vrtice_actual][dest] = verdadero y localiza(dest, visitados) = 1? S: enque(dest, cola_destinos) push((vrtice_actual, dest), pila_ruta) dest = dest + 1 fin mientras fin mientras desplegar mensaje de error (No existe una ruta entre ese origen y ese destino)

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 31 de 33

funcin: ruta_primero_profundidad recibe: dato_orig, dato_dest, grafo (vrtices(existe, dato)[], aristas[][]) regresa: nada pos_orig = localiza_vrtice(dato_orig, grafo) pos_dest = localiza_vrtice(dato_dest, grafo) pos_orig = 1 pos_dest = 1? S: desplegar mensaje de error (alguno de los vrtices no existe) terminar crear una PILA de nombre pila_destinos crear una LISTA de nombre visitados crear una PILA de nombre pila_ruta push(pos_orig, pila_destinos) mientras NO vaca(pila_destinos) vrtice_actual = pop(cola_destinos) localiza_vrtice(vrtice_actual, visitados) = 1? vrtice_actual = pos_dest? S: desplegar resultado terminar insertar(vrtice_actual, visitados) dest = 0 mientras dest < tamao_del_arreglo aristas[vrtice_actual][dest] = verdadero y localiza(dest, visitados) = 1? S: push(dest, pila_destinos) push((vrtice_actual, dest), pila_ruta) dest = dest + 1 fin mientras fin mientras desplegar mensaje de error (No existe una ruta entre ese origen y ese destino)

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 32 de 33

funcin: ruta_primero_mejor recibe: dato_orig, dato_dest, grafo(vrtices(existe, dato)[], aristas(existe, peso)[][]) regresa: nada pos_orig = localiza_vrtice(dato_orig, grafo) pos_dest = localiza_vrtice(dato_dest, grafo) pos_orig = 1 pos_dest = 1? S: desplegar mensaje de error (alguno de los vrtices no existe) terminar crear una LISTA ORDENADA de nombre lista_destinos (recibe: posicin y costo, ordena por costo) crear una LISTA de nombre costos (recibe: posicin y costo) crear una PILA de nombre pila_ruta insertar((pos_orig, 0), costos) insertar((pos_orig, 0), lista_destinos) mientras NO vaca(lista_destinos) vrtice_actual = recupera(primero(lista_destinos)).posicin costo_actual = recupera(primero(lista_destinos)).costo eliminar(primero(lista_destinos)) vrtice_actual = pos_dest? S: desplegar resultado terminar dest = 0 mientras dest < tamao_del_arreglo aristas[vrtice_actual][dest].existe = verdadero? S: costo_aux = costo_actual + aristas[vrtice_actual][dest].costo pos_dest_visitado = localiza(dest, costos) pos_dest_visitado = 1? S: inserta((dest, costo_aux), lista_destinos) inserta((dest, costo_aux), costos) push((vrtice_actual, dest), pila_ruta) No: costo_aux < recupera(pos_dest_visitado, costos).costo? S: elimina(pos_dest_visitado, costos) inserta((dest, costo_aux), costos) elimina(localiza(dest, lista_destinos), lista_destinos) inserta((dest, costo_aux), lista_destinos) push((vrtice_actual, dest), pila_ruta) dest = dest + 1 fin mientras fin mientras desplegar mensaje de error (No existe una ruta entre ese origen y ese destino)

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Algoritmos

Pg. 33 de 33

funcin: muestra_resultado recibe: pila_ruta[orig, dest], pos_destino, grafo(vrtices(existe, dato)[], aristas[][]) regresa: nada dest_actual = pos_destino mientras NO vaca(pila_ruta) imprime: grafo.vrtices[destino_actual] mientras NO vaca(pila_ruta) y top(pila_ruta).dest dest_actual pop(pila_ruta) fin mientras NO vaca(pila_ruta)? destino_actual = top(pila_ruta).orig fin mientras

2006 M.S.I. Alfredo Gutirrez Hernndez

alfredogtzh@gmail.com

Das könnte Ihnen auch gefallen