Académique Documents
Professionnel Documents
Culture Documents
Los siguientes algoritmos fueron tomados de "Estructuras de Datos", Cair Guardati, 2a. Ed., McGraw Hill, 2002.
Algoritmo 5.1
CREAINICIO(P)
{Este algoritmo crea una lista, agregando cada nuevo nodo al inicio de la
misma}
{ P y Q son variables de tipo puntero. P apuntar al inicio de la lista}
1.
2.
3.
4.
5.
Algoritmo 5.2
CREAFINAL(P)
{Este algoritmo crea una lista, agregando cada nuevo nodo al final de la
misma}
{P y Q son variables de tipo puntero. P apuntar al inicio de la lista}
1.
2.
3.
4.
5.
Para poder dar de alta un dato en una lista ligada sencilla es necesario recorrer la
lista nodo por nodo hasta encontrar la posicin adecuada. Se crea un nuevo nodo,
se inserta el dato y se actualizan las ligas del nodo nuevo y del anterior para
intercalar el nuevo nodo en la lista.
Algoritmo 5.3
RECORREITERATIVO(P)
{Este algoritmo recorre una lista cuyo primer nodo est apuntado por P}
{Q es una variable de tipo puntero}
1.
2.
3.
Hacer Q = P
Repetir mientras Q =! NIL
Escribir Q->INFORMACUN
Hacer Q=Q->LIGA {Apunta al siguiente nodo de la lista}
{Fin del ciclo del paso 2}
Algoritmo 5.4
RECORRECURSIVO(P)
{Este algoritmo recorre una lista recursivamente.
nodo a visitar}
1.
la lista}
2.
P es el apuntador al
Si P =! NIL entonces
Escribir P->INFORMACIN
Llamar a RECORRECURSIVO con P->LIGA
{Llamada recursiva con el apuntador al siguiente nodo de
{Fin del condicional del paso 1}
Algoritmo 5.6
INSERTAFINAL(P)
{Este algoritmo inserta un nodo al final de la lista. P es el apuntador
al primer nodo
de la lista, y DATO es la informacin que se almacenar en el nuevo nodo}
{Q y T son variables de tipo puntero}
1.
2.
3.
4.
5.
Hacer T= P
Repetir mientras T ->Liga =! NIL
{Recorre la lista hasta llegar al ltimo elemento}
Hacer T=T->LIGA
{Fin del ciclo del paso 2}
CREA (Q)
Hacer Q->INFORMACIN =DATO, Q->LIGA =NIL y T ->LIGA =Q
Algoritmo 5.7
INSERTANTES ( P, DATO, REF )
{Este algoritmo inserta un nodo dado como referencia, REF. P es el
apuntador al
primer nodo de la lista, y DATO es la informacin que se almacenar en el
nuevo nodo}
{Q, X y T son variables de tipo puntero, BAND es una variable de tipo
booleano}
1.
2.
VERDADERO)
3.
4.
5.
Algoritmo 5.9
ELIMINAPRIMERO(P)
{Este algoritmo borra el primer elemento de una lista.
al primer nodo de la lista}
{Q es una variable de tipo puntero}
P es el apuntador
1.
2.
Hacer Q = P
Si Q -> LIGA =! NIL {Verifica si la lista tiene slo un
3.
4.
Entonces
Hacer P= Q-> LIGA {Redefine el puntero al inicio}
Si no
Hacer P = NIL
{Fin del condicional del paso2}
QUITA(Q)
nodo}
Algoritmo 5.10
ELIMINALTIMO(P)
{Este algoritmo borra el ltimo elemento de una lista.
al primer nodo de la lista}
{Q y T son variables de tipo puntero}
1.
elemento}
2.
P es el apuntador
Algoritmo 5.11
ELIMINAX( P, X )
{Este algoritmo elimina un nodo con informacin X de una lista. P es el
apuntador al primer nodo de la lista}
{Q y T son variables de tipo puntero. BAND es una variable de tipo
booleano}
1.
2.
VERDADERO)
3.
4.
el primero}
5.
(BAND =
Si Q ->LIGA =! NIL
Entonces
Hacer T = Q y Q = Q -> LIGA
Si no
Hacer BAND = FALSO
2.2
{Fin del condicional del paso 2.1}
{Fin del ciclo del paso 2}
Si BAND = FALSO
Entonces
Escribir El elemento no fue encontrado
Si no
4.1
SI P = Q {Verifica si el elemento a eliminar es
Entonces
Hacer P = Q->LIGA
Si no
Hacer T -> LIGA=Q-> LIGA
4.2
{Fin del condicional del paso 4.1}
QUITA(Q)
{Fin del condicional del paso 4}
Algoritmo 5.15
BUSCARRECURSIVO(P,X)
{Este algoritmo busca recursivamente al elemento con informacin X en una
lista que se encuentra desordenada. P es el apuntador del nodo a
visitar}
1.
Si ( P =! NIL)
Entonces
1.1
Si ( P ->INFORMACIN = X )
Entonces
Escribir El elemento se encuentra en la
lista
Si no
1.2
lista
2.
index
next |
previous |
7. Cadenas
7.1. Un tipo de datos compuesto
Hasta ahora hemos visto cinco tipos: int, float, bool, NoneType y str. Las cadenas son
cualitativamente diferentes de los otros cuatro tipos porque estn hechas de piezas
ms pequeas loscaracteres.
Los tipos que comprenden piezas mas pequeas se llaman tipos de datos
compuestos. Dependiendo de lo que hagamos, podemos tratar un tipo de datos
compuesto como una nica cosa o podemos acceder a sus partes. Esta ambigedad
es til.
El operador corchete selecciona slo un carcter de una cadena:
>>> fruta = "banana"
>>> letra = fruta[1]
>>> print letra
7.2. Longitud
La funcin len devuelve el nmero de caracteres de una cadena:
>>> fruta = "banana"
>>> len(fruta)
6
Para obtener la ltima letra de una cadena, puede sentirse tentado a probar algo
como esto:
longitud = len(fruta)
ultima = fruta[longitud]
# ERROR!
Alternativamente podemos usar ndices negativos, que cuentan hacia atrs desde el
final de la cadena. La expresin fruta[-1] da la ltima letra, fruta[-2] da la penltima,
y as sucesivamente.
Este bucle recorre la cadena y muestra cada letra en una lnea distinta. La condicin
del bucle es indice < len(fruta), de modo que cuando indice es igual a la longitud
de la cadena, la condicin es falsa y no se ejecuta el cuerpo del bucle. El ltimo
carcter al que se accede es el que tiene el ndice len(fruta)-1, que es el ltimo
carcter de la cadena.
Usar un ndice para recorrer un conjunto de valores es tan comn que Python
proporciona una sintaxis alternativa ms simple el bucle for:
for carac in fruta:
print carac
Cada vez que recorremos el bucle, se asigna a la variable carac el siguiente carcter
de la cadena. El bucle contina hasta que no quedan ms caracteres.
El ejemplo siguiente muestra cmo usar la concatenacin y a un bucle for para
generar una serie abecedaria. Abecedaria se refiere a la serie o lista en la que
cada uno de los elementos aparece en orden alfabtico. Por ejemplo, en el libro de
Robert McCloskey Make Way for Ducklings, los nombres de los patitos son Jack, Kack,
Lack, Mack, Nack, Ouack, Pack, y Quack. Este bucle muestra esos nombres en orden:
prefijos = "JKLMNOPQ"
sufijo = "ack"
for letra in prefijos:
print letra + sufijo
Jack
Kack
Lack
Mack
Nack
Oack
Pack
Qack
Por supuesto, esto no es del todo correcto, porque Ouack y Quack no estn
correctamente escritos. Usted solucionar esto en un ejercicio ms adelante.
Si omite el primer ndice (antes de los dos puntos), la porcin comienza al principio
de la cadena. Si omite el segundo ndice, la porcin llega al final de la cadena. As:
>>> fruta = "banana"
>>> fruta[:3]
'ban'
>>> fruta[3:]
'ana'
else:
print "S, no tenemos bananas!"
Sin embargo, debera ser consciente de que Python no maneja las letras maysculas
y minsculas como lo hace la gente. Todas las letras maysculas van antes de las
letras minsculas. Por lo tanto:
Su palabra, Cebra, va antes de banana.
Una forma comn de abordar este problema es convertir las cadenas a un formato
estndar como pueden ser las minsculas antes de realizar la comparacin. Un
problema mayor es hacer que el programa se de cuenta de que las cebras no son
frutas.
7.7. El operador in
>>>
True
>>>
False
>>>
True
>>>
False
'z' in 'manzana'
'i' in 'manzana'
'nz' in 'manzana'
'az' in 'manzana'
Pruebe esta funcin para confirmar que realiza lo que queremos que haga.
Para ver lo que hay dentro de l, use la funcin dir con el nombre del mdulo como
un argumento.
>>> dir(string)
Puesto que string.digits es una cadena, podemos mostrarla para ver qu contiene:
>>> print string.digits
0123456789
Este ejemplo demuestra uno de los beneficios de los mdulos ayudan a evitar
colisiones entre los nombres de las funciones de biblioteca y las funciones definidas
por el usuario. Mediante el uso de la notacin punto podemos especificar cul
versin de find/encuentra queremos.
Podemos usar estas constantes y find para clasificar los caracteres. Por ejemplo,
si find(lowercase, carac) devuelve un valor distinto de -1, entonces carac debe ser
una letra minscula:
def es_minuscula(carac):
return string.find(string.lowercase, carac) != -1
def es_minuscula(carac):
return carac in string.lowercase
Los caracteres de whitespace mueven el cursor sin mostrar nada. Crean los
espacios en blanco entre los caracteres visibles (al menos sobre el papel). La
constante string.whitespace contiene todos los caracteres de espacio en blanco,
incluidos espacio, tabulador (\t), y salto de lnea (\n).
Hay otras funciones tiles en el mdulo string, pero este libro no pretende ser un
manual de referencia. Por otra parte, la Python Library Reference - Biblioteca de
Referencia de Python s lo es, que, junto con un cmulo de documentacin adicional,
est disponible en el sitio web de Python, http://www.python.org, (Documentacin
adicional en espaol, limitada, se puede encontrar aqu
<http://wiki.python.org/moin/Languages/Spanish?highlight=(CategoryLanguage)> .
Este programa muestra una tabla de varias potencias de los nmeros del 1 al 10. En
su forma actual, la tabla depende del carcter de tabulacin (\t) para alinear las
columnas de valores, pero esto se distorsiona cuando los valores en la tabla son ms
largos que el ancho de 8 del carcter de tabulacin:
i
1
2
3
4
5
6
7
8
9
10
i**2
1
4
9
16
25
36
49
64
81
100
Una posible solucin sera cambiar el ancho del carcter de tabulacin, pero la
primera columna ya tiene ms espacio del que necesita. La mejor solucin es sera
establecer el ancho de cada columna independientemente. Como probablemente ya
ha adivinado, el formateo de cadenas proporciona la solucin:
i=1
print "%-4s%-5s%-6s%-8s%-13s%-15s" % \
('i', 'i**2', 'i**3', 'i**5', 'i**10', 'i**20')
while i <= 10:
print "%-4d%-5d%-6d%-8d%-13d%-15d" % (i, i**2, i**3, i**5, i**10, i**20)
i += 1
7.14. Glosario
tipo de datos compuesto:
ndice:
Una variable o valor usado para seleccionar un miembro de un conjunto
ordenado, como puede ser un carcter de una cadena.
recorrido:
Iterar sobre los elementos de un conjunto, realizando una operacin similar
en cada uno de ellos.
porcin:
Una parte de una cadena (subcadena) especificada mediante un rango de
ndices. Ms ampliamente, una subsecuencia de cualquier tipo de secuencia
en Python puede ser creada usando el operador porcin
(secuencia[inicio:fin] ).
inmutable:
Tipos de datos compuestos a cuyos elementos no se les puede asignar
nuevos valores.
parmetro opcional:
Parmetro escrito en un encabezado de una funcin con una asignacin de un
valor por defecto, el cual ser recibido por la llamada a funcin si no se le da
el correspondiente argumento.
notacin punto:
Uso el operador punto, ., para acceder funciones dentro de un mdulo.
whitespace:
7.15. Ejercicios
1. Modifique:
2. prefijos = "JKLMNOPQ"
3. sufijo = "ack"
4.
5. for letra in prefijos:
6.
print letra + sufijo
Agregue un cuerpo a la
funcin invertir que haga que
pase la prueba unitaria.
32. Agregue reflejar a herramientasde
cadenas.py.
33. def reflejar(s):
34.
"""
35.
>>> reflejar("bien")
36.
'bienneib'
37.
>>> reflejar("s")
38.
'ss'
39.
>>> reflejar('Python')
40.
'PythonnohtyP'
41.
>>> reflejar("")
42.
''
43.
>>> reflejar("a")
44.
'aa'
45.
"""
81.
82.
83.
3. %-10.2f%-10.2f % (7,
1.0/2)
4. print $%5.2fn $%5.2fn $
%5.2f % (3, 4.5, 11.2)
111.
index
next |
previous |