0% encontró este documento útil (0 votos)
28 vistas15 páginas

Prac Estructura 3

El documento presenta una serie de prácticas sobre listas dobles normales y circulares en el contexto de la programación en Python. Incluye funciones para manipular listas, como mover nodos, unir listas sin repetidos, eliminar nodos específicos, insertar elementos, y realizar operaciones de conteo y búsqueda. También se abordan conceptos como puntos silla y palíndromos en listas circulares.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
28 vistas15 páginas

Prac Estructura 3

El documento presenta una serie de prácticas sobre listas dobles normales y circulares en el contexto de la programación en Python. Incluye funciones para manipular listas, como mover nodos, unir listas sin repetidos, eliminar nodos específicos, insertar elementos, y realizar operaciones de conteo y búsqueda. También se abordan conceptos como puntos silla y palíndromos en listas circulares.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD PÚBLICA DE EL ALTO

CARRERA INGENIERIA DE SISTEMAS


ESTRUCTURA DE DATOS

APELLIDOS Y NOMBRES: MEDINA LIMACHI DAMARIS ESTHER


M
FECHA: / /24 PARALELO: 3 “B”. CI: 13022131. INICIAL AP.

PRACTICA #3
LISTAS DOBLES NORMALES
2. Dada lista doble normal, llevar el primer nodo al final de la lista

CODIGO EJECUCION

def llevarPrimerNodoAlFinal(self):

if self.LD is not None and self.LD.sigte is


not None:

r = self.LD

self.LD = r.sigte

self.LD.ant = None

actual = self.LD

while actual.sigte is not None:

actual = actual.sigte

actual.sigte = r

r.ant = actual

r.sigte = None
4. Dada dos listas dobles normal, realizar la unión de ambas listas en tercera lista, en la lista no
existe elementos repetidos

def unionSinRepetidos(self, Lista2):

Lista3 = ListaDoble()

r = self.LD

while r is not None:

Lista3.adicionaFinal(r.dato)

r = r.sigte

w = Lista2.LD

while w is not None:

Lista3.adicionaFinal(w.dato)

w = w.sigte

Lista3.eliminarRepetidos()

return Lista3
6 Dada lista doble normal, eliminar el nodo k-ésimo de la lista

def eliminarNodoKesimo(self, k):

if self.LD is not None:

r = self.LD

contador = 1

while r is not None and contador < k:

r = r.sigte

contador += 1

if r is not None:

if r == self.LD:

self.eliminaInicio()

elif r.sigte is None:

self.eliminaFinal()

else:

r.ant.sigte = r.sigte

r.sigte.ant = r.ant

else:

print("No se encontró el nodo k-ésimo en la


lista.")

else:

print("Lista Vacia...")
8 Dada una lista doble normal, insertar un elemento X antes del primer elemento par.

def insertarAntesPrimerPar(self, X):

if self.LD is not None:

r = self.LD

while r is not None:

if r.dato % 2 == 0:

self.adicionaAntes(X, r.dato)

break

r = r.sigte

if r is None:

print("No se encontró un número


par en la lista.")

else:

print("Lista Vacia...")
10 Dada una lista doble intercambiar el primer elemento con el último elemento

def intercambia(self):

if self.LD is not None:

r = self.LD

while r.sigte is not None:

r = r.sigte

z = r.ant

w = self.LD

self.LD = r

self.LD.sigte = w.sigte

w.sigte.ant = self.LD

self.LD.ant = None

z.sigte = w

w.ant = z

w.sigte = None
12. Una lista doble dividir en dos listas a partir del nodo k-ésimo. Donde k es dado por el

def dividirListaEnDos(self, k):

lista1 = ListaDoble()

lista2 = ListaDoble()

if self.LD is not None:

aux = self.LD

contador = 1

while aux is not None:

if contador <= k:

lista1.adicionaFinal(aux.dato)

else:

lista2.adicionaFinal(aux.dato)

aux = aux.sigte

contador += 1

else:

print("Lista Vacia...")

return lista1, lista2


14. En una lista doble generar la siguiente serie s=3 1 , 32 , 33 , 34 , 35 3 6 , 37 , 38 , 39 , 310

def
generarSerie(self, n):
for i in range(1,
n + 1):
self.adicionaFi
nal(3 ** i)
16. Dada una lista doble normal, mostrar todos los elementos que son puntos silla. Se considera a
un elemento V(i) como punto silla, si se cumple la siguiente condición: V(i-1) < V(i) < V(i+1).

def puntosSilla(self):

puntos_silla = ListaDoble()

if self.LD is None or self.LD.sigte is None


or self.LD.sigte.sigte is None:

print("Lista vacía o insuficiente para


encontrar puntos silla...")

else:

aux = self.LD.sigte

while aux.sigte is not None:

print(f"Comparando: {aux.ant.dato}
< {aux.dato} < {aux.sigte.dato}")

if aux.ant.dato < aux.dato <


aux.sigte.dato:

puntos_silla.adicionaFinal(aux.da
to)

aux = aux.sigte

if puntos_silla.LD is None:

print("No se encontraron puntos


silla en la lista.")
return puntos_silla
LISTAS CRICULARES DOBLES

2. Dada una lista contar cuantos elementos múltiplos de x existen

def
contarMultiploX(self,x)
:
c=0
if
self.L!=None:
r=self.L
while
r.sigte!=self.L:
if
r.dato%x==0:

c=c+1

r=r.sigte
if
r.dato%x==0:

c=c+1
print("Total
multiplos:",c)
4. Dada una lista doble circular eliminar los elementos repetidos de la lista

def eliminaRepetidos(self):
if self.L!=None:
r=self.L
while r.sigte!=self.L:
w=r.sigte
while w.sigte!=self.L:
if r.dato==w.dato:
w.ant.sigte =
w.sigte
w.sigte.ant=
w.ant
w=r.sigte
w=w.sigte
if r.dato==w.dato:

self.eliminaFinal()
r=r.sigte

def insertax(self,x,y):
if self.L!=None:
r=self.L
while r.sigte!=self.L:
if r.dato==y:
q=NodoLD()
q.dato=x
r.sigte.ant=q
q.sigte = r.sigte
r.sigte = q
q.ant =r
r=r.sigte.sigte
else:
r=r.sigte

if r.dato==y:
self.adicionaFinal(x)
6. Dada una lista doble circular insertar un elemento x después de cada elemento Y, si existe

def insertax(self,x,y):
if self.L!=None:
r=self.L
while
r.sigte!=self.L:
if r.dato==y:
q=NodoLD()
q.dato=x
r.sigte.ant=q
q.sigte =
r.sigte
r.sigte = q
q.ant =r

r=r.sigte.sigte
else:
r=r.sigte

if r.dato==y:

self.adicionaFinal(x)
8. Insertar un elemento x en una lista doble circular, en el lugar que le corresponde

def insertaXordenado(self, x):


q = NodoLD()
q.dato = x
if self.esta_vacia():
q.sigte = q
q.ant = q
self.L = q
else:
r = self.L
while r.sigte != self.L
and r.dato < x:
r = r.sigte
if r == self.L:

self.adicionaInicio(x)
else:
if r.sigte ==
self.L and r.dato < x:

self.adicionaFinal(x)
else:
r.ant.sigte = q
q.ant = r.ant
q.sigte = r
r.ant = q
10.Dada una listar doble circular donde se almacena elementos de tipo String (cadenas), contar
cuantos elementos son palíndromo (un palíndromo es una palabra, frase, número o cualquier
secuencia de caracteres que se lee de la misma manera hacia adelante y hacia atrás. Ej. “ORURO”),
en este ejercicio debe realizar todas las operaciones básicas (adición, eliminación, listado)

def contarPalindromos(self):
if self.esta_vacia():
return 0

contador = 0
r = self.L
while True:
if
self.esPalindromo(r.dato):
contador += 1
r = r.sigte
if r == self.L:
break
return contador

def esPalindromo(self, cadena):


# Eliminamos espacios y
convertimos a minúsculas para
comparar
cadena =
cadena.lower().replace(" ", "")
return cadena == cadena[::-1]
12.En una lista doble circular, almacenar datos de un producto(cod, descripción, marca, cantidad,
precio) y realizar las siguientes operaciones.

 Adicionar productos

 Eliminar un x producto

 Buscar un producto x por código

 Llevar a otra lista simple los productos cuya cantidad sea igual a 0

 Listar todos los productos

def buscarCodigo(self):
cod=input("codigo a
buscar")
s=""
if self.L!=None:
r=self.L
while
r.sigte!=self.L:
if
cod==r.dato.getId():

s=s+r.dato.getTodo()
r=r.sigte

if
cod==r.dato.getId():

s=s+r.dato.getTodo()
return s

def llevarCant0(self):
listaS=ListaSimpleP()
if self.L!=None:
r=self.L
while
r.sigte!=self.L:
if
r.dato.getCant()=="0":

listaS.adicionaFinal(r.dato)
r=r.sigte
if
r.dato.getCant()=="0":

listaS.adicionaFinal(r.dato)
14.Dada una lista doble circular, sumar los pares e impares por separado, y obtener la media
aritmética….

def sumaParImpar(self):
Sp=0
Si=0
cp=0
ci=0
if self.L!=0:
r=self.L
while r.sigte!=self.L:
if r.dato%2==0:
Sp=Sp+r.dato
cp=cp+1
else:
Si=Si+r.dato
ci=ci+1
r=r.sigte
if r.dato%2==0:
Sp=Sp+r.dato
cp=cp+1
else:
Si=Si+r.dato
ci=ci+1

pp=Sp/cp
pi=Si/ci
print("el promedio de
pares:",pp)
print("el promedio de
impares:",pi)

También podría gustarte