Ejercicio 13
This commit is contained in:
parent
3787db0fe3
commit
aa54b5eb48
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,138 @@
|
||||||
|
class SingleLinkedListNode(object):
|
||||||
|
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value = value
|
||||||
|
self.next = None
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
nval = self.next and self.next.value or None
|
||||||
|
return f"[{self.value}:{repr(nval)}]"
|
||||||
|
|
||||||
|
|
||||||
|
class SingleLinkedList(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.begin = None
|
||||||
|
self.end = None
|
||||||
|
|
||||||
|
def count(self):
|
||||||
|
"""
|
||||||
|
Returns number of items.
|
||||||
|
Regresa la cantidad de ítems.
|
||||||
|
"""
|
||||||
|
count = 0
|
||||||
|
node = self.begin
|
||||||
|
while node:
|
||||||
|
count += 1
|
||||||
|
node = node.next
|
||||||
|
return count
|
||||||
|
|
||||||
|
def push(self, obj):
|
||||||
|
"""
|
||||||
|
Appends a new item on the end of the list.
|
||||||
|
Añade un nuevo ítem al final de la lista.
|
||||||
|
"""
|
||||||
|
node = SingleLinkedListNode(obj)
|
||||||
|
if self.begin is None:
|
||||||
|
self.begin = node
|
||||||
|
self.end = self.begin
|
||||||
|
else:
|
||||||
|
self.end.next = node
|
||||||
|
self.end = node
|
||||||
|
|
||||||
|
def pop(self):
|
||||||
|
"""
|
||||||
|
Removes the last item and returns its value.
|
||||||
|
Remueve el último ítem y regresa su valor.
|
||||||
|
"""
|
||||||
|
if self.end is None:
|
||||||
|
value = None
|
||||||
|
elif self.end == self.begin:
|
||||||
|
value = self.end.value
|
||||||
|
self.end = self.begin = None
|
||||||
|
else:
|
||||||
|
node = self.begin
|
||||||
|
while node.next != self.end:
|
||||||
|
node = node.next
|
||||||
|
value = node.next.value
|
||||||
|
self.end = node
|
||||||
|
self.end.next = None
|
||||||
|
return value
|
||||||
|
|
||||||
|
def unshift(self):
|
||||||
|
"""
|
||||||
|
Removes the first item and returns its value.
|
||||||
|
Remueve el primer ítem y regresa su valor.
|
||||||
|
"""
|
||||||
|
if self.begin is None:
|
||||||
|
value = None
|
||||||
|
elif self.begin == self.end:
|
||||||
|
value = self.begin.value
|
||||||
|
self.begin = self.end = None
|
||||||
|
else:
|
||||||
|
value = self.begin.value
|
||||||
|
self.begin = self.begin.next
|
||||||
|
return value
|
||||||
|
|
||||||
|
def shift(self, obj):
|
||||||
|
"""
|
||||||
|
Appends a new item on the begin of the list.
|
||||||
|
Añade un nuevo ítem al inicio de la lista.
|
||||||
|
"""
|
||||||
|
node = SingleLinkedListNode(obj)
|
||||||
|
if self.begin is None:
|
||||||
|
self.begin = node
|
||||||
|
self.end = self.begin
|
||||||
|
else:
|
||||||
|
curr, total = 0, self.count()
|
||||||
|
self.push(node.value)
|
||||||
|
while curr < total:
|
||||||
|
self.push(self.unshift())
|
||||||
|
curr += 1
|
||||||
|
|
||||||
|
def remove(self, obj):
|
||||||
|
"""
|
||||||
|
Removes a item by its value and return its list index.
|
||||||
|
Remueve un ítem según su valor y regresa su índice en la lista.
|
||||||
|
"""
|
||||||
|
count = 0
|
||||||
|
node = self.begin
|
||||||
|
while node.next:
|
||||||
|
if obj == node.value:
|
||||||
|
break
|
||||||
|
count += 1
|
||||||
|
node = node.next
|
||||||
|
if node.next:
|
||||||
|
node.value = node.next.value
|
||||||
|
node.next = node.next.next
|
||||||
|
else:
|
||||||
|
node = None
|
||||||
|
return count
|
||||||
|
|
||||||
|
def get(self, index):
|
||||||
|
"""
|
||||||
|
Returns item value at list index.
|
||||||
|
Regresa el valor del ítem en el índice de la lista.
|
||||||
|
"""
|
||||||
|
count = 0
|
||||||
|
node = self.begin
|
||||||
|
while count != index:
|
||||||
|
count += 1
|
||||||
|
node = node.next
|
||||||
|
if node:
|
||||||
|
return node.value
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def first(self):
|
||||||
|
"""
|
||||||
|
Returns value of first item.
|
||||||
|
Regresa el valor del primer ítem.
|
||||||
|
"""
|
||||||
|
return self.begin.value
|
||||||
|
|
||||||
|
def last(self):
|
||||||
|
"""
|
||||||
|
Returns value of last item.
|
||||||
|
Regresa el valor del último ítem.
|
||||||
|
"""
|
||||||
|
return self.end.value
|
|
@ -0,0 +1,97 @@
|
||||||
|
from sllist import *
|
||||||
|
|
||||||
|
|
||||||
|
def test_push():
|
||||||
|
colors = SingleLinkedList()
|
||||||
|
colors.push("Pthalo Blue")
|
||||||
|
assert colors.count() == 1
|
||||||
|
colors.push("Ultramarine Blue")
|
||||||
|
assert colors.count() == 2
|
||||||
|
|
||||||
|
|
||||||
|
def test_pop():
|
||||||
|
colors = SingleLinkedList()
|
||||||
|
colors.push("Magenta")
|
||||||
|
colors.push("Alizarin")
|
||||||
|
assert colors.pop() == "Alizarin"
|
||||||
|
assert colors.count() == 1
|
||||||
|
assert colors.pop() == "Magenta"
|
||||||
|
assert colors.count() == 0
|
||||||
|
assert colors.pop() == None
|
||||||
|
|
||||||
|
|
||||||
|
def test_get():
|
||||||
|
colors = SingleLinkedList()
|
||||||
|
colors.push("Vermillion")
|
||||||
|
assert colors.get(0) == "Vermillion"
|
||||||
|
colors.push("Sap Green")
|
||||||
|
assert colors.get(0) == "Vermillion"
|
||||||
|
assert colors.get(1) == "Sap Green"
|
||||||
|
colors.push("Cadmium Yellow Light")
|
||||||
|
assert colors.get(0) == "Vermillion"
|
||||||
|
assert colors.get(1) == "Sap Green"
|
||||||
|
assert colors.get(2) == "Cadmium Yellow Light"
|
||||||
|
assert colors.pop() == "Cadmium Yellow Light"
|
||||||
|
assert colors.get(0) == "Vermillion"
|
||||||
|
assert colors.get(1) == "Sap Green"
|
||||||
|
assert colors.get(2) == None
|
||||||
|
colors.pop()
|
||||||
|
assert colors.get(0) == "Vermillion"
|
||||||
|
colors.pop()
|
||||||
|
assert colors.get(0) == None
|
||||||
|
|
||||||
|
|
||||||
|
def test_unshift():
|
||||||
|
colors = SingleLinkedList()
|
||||||
|
colors.push("Viridian")
|
||||||
|
colors.push("Sap Green")
|
||||||
|
colors.push("Van Dyke")
|
||||||
|
assert colors.unshift() == "Viridian"
|
||||||
|
assert colors.unshift() == "Sap Green"
|
||||||
|
assert colors.unshift() == "Van Dyke"
|
||||||
|
assert colors.unshift() == None
|
||||||
|
assert colors.count() == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_shift():
|
||||||
|
colors = SingleLinkedList()
|
||||||
|
colors.shift("Cadmium Orange")
|
||||||
|
assert colors.count() == 1
|
||||||
|
colors.shift("Carbazole Violet")
|
||||||
|
assert colors.count() == 2
|
||||||
|
assert colors.pop() == "Cadmium Orange"
|
||||||
|
assert colors.count() == 1
|
||||||
|
assert colors.pop() == "Carbazole Violet"
|
||||||
|
assert colors.count() == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_first():
|
||||||
|
colors = SingleLinkedList()
|
||||||
|
colors.push("Cadmium Red Light")
|
||||||
|
assert colors.first() == "Cadmium Red Light"
|
||||||
|
colors.push("Hansa Yellow")
|
||||||
|
assert colors.first() == "Cadmium Red Light"
|
||||||
|
colors.shift("Pthalo Green")
|
||||||
|
assert colors.first() == "Pthalo Green"
|
||||||
|
|
||||||
|
|
||||||
|
def test_last():
|
||||||
|
colors = SingleLinkedList()
|
||||||
|
colors.push("Cadmium Red Light")
|
||||||
|
assert colors.last() == "Cadmium Red Light"
|
||||||
|
colors.push("Hansa Yellow")
|
||||||
|
assert colors.last() == "Hansa Yellow"
|
||||||
|
colors.shift("Pthalo Green")
|
||||||
|
assert colors.last() == "Hansa Yellow"
|
||||||
|
|
||||||
|
|
||||||
|
def test_remove():
|
||||||
|
colors = SingleLinkedList()
|
||||||
|
colors.push("Cobalt")
|
||||||
|
colors.push("Zinc White")
|
||||||
|
colors.push("Nickle Yellow")
|
||||||
|
colors.push("Perinone")
|
||||||
|
assert colors.remove("Cobalt") == 0
|
||||||
|
assert colors.remove("Perinone") == 2
|
||||||
|
assert colors.remove("Nickle Yellow") == 1
|
||||||
|
assert colors.remove("Zinc White") == 0
|
Loading…
Reference in New Issue