finished week 1 excersises
This commit is contained in:
parent
20a2ce71f0
commit
ccce41e297
43
period_1/02-linked_list/201_T01_A01_Node_Class/Node.py
Normal file
43
period_1/02-linked_list/201_T01_A01_Node_Class/Node.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Linked Lists -> Node Implementation: Tutorial 1
|
||||||
|
|
||||||
|
The goal of this tutorial is to learn how to create a custom node data structure.
|
||||||
|
In its most basic form, each node contains:
|
||||||
|
* data,
|
||||||
|
* and a reference (in other words, a link) to the next node in the sequence
|
||||||
|
A node class contains setters and getters methods to set and retrieve data of a node.
|
||||||
|
Similarly, to set and get a reference of the next node in sequence,
|
||||||
|
|
||||||
|
Your task is to:
|
||||||
|
* locate the TODOs in this file
|
||||||
|
* complete the missing part from the code
|
||||||
|
* run the test of this tutorial located in same folder.
|
||||||
|
|
||||||
|
To test run 'Node_t.py' in your command line
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
* do not change class structure or method signature to not break unit tests
|
||||||
|
* visit this url for more information on linked list:
|
||||||
|
https://realpython.com/linked-lists-python/
|
||||||
|
"""
|
||||||
|
class Node:
|
||||||
|
# TODO1: Set the initial values of the current Node
|
||||||
|
def __init__(self, data=None, next=None):
|
||||||
|
self.data = data
|
||||||
|
self.next = next
|
||||||
|
|
||||||
|
# TODO 2: Return the value inside a node
|
||||||
|
def getData(self):
|
||||||
|
return self.data
|
||||||
|
|
||||||
|
# TODO 3: change or set the value of the current Node
|
||||||
|
def setData(self, data):
|
||||||
|
self.data = data
|
||||||
|
|
||||||
|
# TODO 4: Get the reference to next node in the list
|
||||||
|
def getNext(self):
|
||||||
|
return self.next
|
||||||
|
|
||||||
|
# TODO 5: Set the reference to the next Node in the list
|
||||||
|
def setNext(self, next):
|
||||||
|
self.next = next
|
26
period_1/02-linked_list/201_T01_A01_Node_Class/Node_t.py
Normal file
26
period_1/02-linked_list/201_T01_A01_Node_Class/Node_t.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
This test case will verify if the provided solution by a student for Node.py is correct.
|
||||||
|
"""
|
||||||
|
from Node import *
|
||||||
|
|
||||||
|
# Instantiate the first node
|
||||||
|
A = Node('A')
|
||||||
|
|
||||||
|
# Instantiate another node
|
||||||
|
B = Node()
|
||||||
|
B.setData('B')
|
||||||
|
|
||||||
|
print(A)
|
||||||
|
print(B)
|
||||||
|
|
||||||
|
# Get data and the reference to next Node of the node A
|
||||||
|
print(A.getData())
|
||||||
|
print(A.getNext())
|
||||||
|
|
||||||
|
# Get data and the reference to next Node of the node B
|
||||||
|
A.setNext(B)
|
||||||
|
tmp = A.getNext()
|
||||||
|
print(tmp.getData())
|
||||||
|
|
||||||
|
print(B.getNext())
|
@ -0,0 +1,75 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Linked Lists -> Linked List Implementation: Tutorial 2
|
||||||
|
|
||||||
|
The goal of this tutorial is to learn how to create a custom singly linked list data structure.
|
||||||
|
This data structure consists of a collection of nodes which together represent a sequence.
|
||||||
|
The LinkedList class should contain methods that can be performed on a linked lists:
|
||||||
|
Those methods include insertion, deletion and traversal.
|
||||||
|
In this tutorial we will implement only a selection of those methods such as:
|
||||||
|
insertion, length and traversal
|
||||||
|
|
||||||
|
Your task is to:
|
||||||
|
* locate the TODOs in this file
|
||||||
|
* complete the missing part from the code
|
||||||
|
* run the test of this tutorial located in same folder.
|
||||||
|
|
||||||
|
To test run LinkedList_t.py in your command line'
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
* do not change class structure or method signature to not break unit tests
|
||||||
|
* visit this url for more information on linked list:
|
||||||
|
https://realpython.com/linked-lists-python/
|
||||||
|
"""
|
||||||
|
class Node:
|
||||||
|
def __init__(self, data=None, next=None):
|
||||||
|
self.data = data
|
||||||
|
self.next = next
|
||||||
|
|
||||||
|
def getData(self):
|
||||||
|
return self.data
|
||||||
|
|
||||||
|
def getNext(self):
|
||||||
|
return self.next
|
||||||
|
|
||||||
|
def setData(self, data):
|
||||||
|
self.data = data
|
||||||
|
|
||||||
|
def setNext(self,next):
|
||||||
|
self.next = next
|
||||||
|
|
||||||
|
class LinkedList:
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.first = None
|
||||||
|
|
||||||
|
def append(self, item):
|
||||||
|
#TODO 1: Append an item to the end of the list
|
||||||
|
if self.first is None:
|
||||||
|
self.first = item
|
||||||
|
else:
|
||||||
|
current = self.first
|
||||||
|
|
||||||
|
while current.getNext() is not None:
|
||||||
|
current = current.getNext()
|
||||||
|
|
||||||
|
current.setNext(item)
|
||||||
|
|
||||||
|
def getLen(self):
|
||||||
|
#TODO 2: Find the length of the list and return it
|
||||||
|
current = self.first
|
||||||
|
count = 1
|
||||||
|
|
||||||
|
while current.getNext() is not None:
|
||||||
|
count += 1
|
||||||
|
current = current.getNext()
|
||||||
|
|
||||||
|
return count
|
||||||
|
|
||||||
|
def printAll(self):
|
||||||
|
#TODO 3: Traverse through all elements in the list from the head to the end and print each value
|
||||||
|
current = self.first
|
||||||
|
print(current.getData())
|
||||||
|
|
||||||
|
while current.getNext() is not None:
|
||||||
|
current = current.getNext()
|
||||||
|
print(current.getData())
|
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
This test case will verify if the provided solution by a student for LinkedList.py is correct.
|
||||||
|
"""
|
||||||
|
from LinkedList import *
|
||||||
|
|
||||||
|
# Instantiate a node and set a value
|
||||||
|
new_node = Node()
|
||||||
|
new_node.setData('A')
|
||||||
|
|
||||||
|
# Instantiate a linked list
|
||||||
|
llst1 = LinkedList()
|
||||||
|
# Insert a node to the list
|
||||||
|
llst1.append(new_node)
|
||||||
|
# Traverse through the list and print values
|
||||||
|
llst1.printAll()
|
||||||
|
# Print the length of the list
|
||||||
|
print(llst1.getLen())
|
||||||
|
|
||||||
|
# Instantiate aother node and set a value
|
||||||
|
new_node = Node('B')
|
||||||
|
# Insert another node to the list
|
||||||
|
llst1.append(new_node)
|
||||||
|
# Traverse through the list and print values
|
||||||
|
llst1.printAll()
|
||||||
|
# Print the length of the list
|
||||||
|
print(llst1.getLen())
|
||||||
|
|
||||||
|
# Insert multiple values to the list
|
||||||
|
for item in ['C', 'D', 'E', 'F']:
|
||||||
|
new_node = Node(item, None)
|
||||||
|
llst1.append(new_node)
|
||||||
|
|
||||||
|
# Print all values in the list and its length
|
||||||
|
llst1.printAll()
|
||||||
|
print(llst1.getLen())
|
@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Linked Lists -> Song List Implementation: Exercise 1
|
||||||
|
|
||||||
|
The goal of this exercise is to learn how to create a custom linked list for songs.
|
||||||
|
Each node in this linked list represent a song.
|
||||||
|
This data structure consists of a collection of songs(node) which together represent a playlist.
|
||||||
|
The SongList class contains methods to insert a song, and traversal through the list to print titles.
|
||||||
|
|
||||||
|
Your task is to:
|
||||||
|
* locate the TODOs in this file
|
||||||
|
* complete the missing part from the code
|
||||||
|
* run the test of this tutorial located in same folder.
|
||||||
|
|
||||||
|
To test run 'SongList_t.py' in your command line
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
* do not change class structure or method signature to not break unit tests
|
||||||
|
* visit this url for more information on linked list:
|
||||||
|
https://realpython.com/linked-lists-python/
|
||||||
|
"""
|
||||||
|
class SongNode:
|
||||||
|
def __init__(self, song_title=None, next = None):
|
||||||
|
self.song_title = song_title
|
||||||
|
self.next = next
|
||||||
|
|
||||||
|
class SongList:
|
||||||
|
def __init__(self):
|
||||||
|
self.head = None
|
||||||
|
|
||||||
|
def printSongs(self):
|
||||||
|
# Traverse through the list and print every song titles
|
||||||
|
current = self.head
|
||||||
|
while current != None:
|
||||||
|
print(current.song_title)
|
||||||
|
current = current.next
|
||||||
|
|
||||||
|
def AddNewSong(self, new_song_title):
|
||||||
|
# Insert a new song title to the end of the list
|
||||||
|
new_song = SongNode(new_song_title)
|
||||||
|
if self.head == None:
|
||||||
|
self.head = new_song
|
||||||
|
return
|
||||||
|
current = self.head
|
||||||
|
while current.next != None:
|
||||||
|
current = current.next
|
||||||
|
current.next = new_song
|
@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
This test case will verify if the provided solution by a student for SongList.py is correct.
|
||||||
|
"""
|
||||||
|
from SongList import *
|
||||||
|
|
||||||
|
# Instantiate a song list
|
||||||
|
linkedlist = SongList()
|
||||||
|
print(linkedlist)
|
||||||
|
|
||||||
|
# Instantiate some nodes with values
|
||||||
|
linkedlist.head = SongNode("A Hard Day's Night")
|
||||||
|
second = SongNode('A Day in the Life')
|
||||||
|
third = SongNode("Strawberry Fields Forever")
|
||||||
|
|
||||||
|
# Link nodes instances
|
||||||
|
linkedlist.head.next = second
|
||||||
|
second.next = third
|
||||||
|
third.next = None
|
||||||
|
|
||||||
|
# Traverse through the list and print each song title
|
||||||
|
linkedlist.printSongs()
|
||||||
|
|
||||||
|
# Insert more songs
|
||||||
|
linkedlist.AddNewSong("She Loves You")
|
||||||
|
linkedlist.AddNewSong("Something")
|
||||||
|
linkedlist.printSongs()
|
109
period_1/02-linked_list/204_HW1_A04_LinkedList_Class/LinkedList.py
Executable file
109
period_1/02-linked_list/204_HW1_A04_LinkedList_Class/LinkedList.py
Executable file
@ -0,0 +1,109 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Linked List -> Extended Linked List Implementation: Homework
|
||||||
|
|
||||||
|
The goal of this homework is to implement a singly linked list data structure with additional functionalities.
|
||||||
|
In previous tutorials you have learned how a node and a linked list data structure in its basic form can be created.
|
||||||
|
However, a LinkedList class can have more methods to perform additional operations on a linked list,
|
||||||
|
such as: insertion (begin, end, or after a specific element), deletion, traversal, and sorting.
|
||||||
|
|
||||||
|
Your task is to:
|
||||||
|
* locate the TODOs in this file
|
||||||
|
* complete the missing part from the code
|
||||||
|
* run the test of this homework located in same folder.
|
||||||
|
|
||||||
|
To test run LinkedList_t.py in your command line'
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
* do not change class structure or method signature to not break unit tests
|
||||||
|
* visit this url for more information on linked list:
|
||||||
|
https://realpython.com/linked-lists-python/
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Teuntje van Leeuwe 1007734
|
||||||
|
# Ryan Bakkes 1001519
|
||||||
|
class Node:
|
||||||
|
def __init__(self, data):
|
||||||
|
self.data = data
|
||||||
|
self.next = None
|
||||||
|
|
||||||
|
class LinkedList:
|
||||||
|
def __init__(self):
|
||||||
|
self.head = None
|
||||||
|
|
||||||
|
#TODO 1:Insert at the beginning of the list
|
||||||
|
def insertBeg(self, new_data):
|
||||||
|
new_node = Node(new_data)
|
||||||
|
new_node.next = self.head
|
||||||
|
self.head = new_node
|
||||||
|
|
||||||
|
#TODO 2: Insert at the end
|
||||||
|
def insertEnd(self, new_data):
|
||||||
|
new_node = Node(new_data)
|
||||||
|
if self.head == None:
|
||||||
|
self.head = new_node
|
||||||
|
return
|
||||||
|
current = self.head
|
||||||
|
while current.next != None:
|
||||||
|
current = current.next
|
||||||
|
current.next = new_node
|
||||||
|
|
||||||
|
#TODO 3: Insert after a specific node
|
||||||
|
def insertAfter(self, data, new_data):
|
||||||
|
# Insert after a specific node
|
||||||
|
new_node = Node(new_data)
|
||||||
|
current = self.head
|
||||||
|
while current != None:
|
||||||
|
if current.data == data:
|
||||||
|
new_node.next = current.next
|
||||||
|
current.next = new_node
|
||||||
|
return
|
||||||
|
current = current.next
|
||||||
|
|
||||||
|
#TODO 4: Deleting a node at a specific index
|
||||||
|
def deleteIndex(self, index):
|
||||||
|
current = self.head
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
if x == index:
|
||||||
|
self.head = current.next
|
||||||
|
return
|
||||||
|
|
||||||
|
while current != None:
|
||||||
|
if x == index - 1:
|
||||||
|
current.next = current.next.next
|
||||||
|
return
|
||||||
|
current = current.next
|
||||||
|
x += 1
|
||||||
|
|
||||||
|
#TODO 5: Search an element
|
||||||
|
def find(self, key):
|
||||||
|
current = self.head
|
||||||
|
x = 0
|
||||||
|
while current != None:
|
||||||
|
if current.data == key:
|
||||||
|
return x
|
||||||
|
current = current.next
|
||||||
|
x += 1
|
||||||
|
return -1
|
||||||
|
|
||||||
|
#TODO 6: Sort the linked list
|
||||||
|
def sort(self, head):
|
||||||
|
current = head
|
||||||
|
index = None
|
||||||
|
|
||||||
|
while current != None:
|
||||||
|
index = current.next
|
||||||
|
while index != None:
|
||||||
|
if current.data > index.data:
|
||||||
|
temp = current.data
|
||||||
|
current.data = index.data
|
||||||
|
index.data = temp
|
||||||
|
index = index.next
|
||||||
|
current = current.next
|
||||||
|
|
||||||
|
#TODO 7: Print the linked list
|
||||||
|
def printList(self):
|
||||||
|
current = self.head
|
||||||
|
while current != None:
|
||||||
|
print(current.data)
|
||||||
|
current = current.next
|
40
period_1/02-linked_list/204_HW1_A04_LinkedList_Class/LinkedList_t.py
Executable file
40
period_1/02-linked_list/204_HW1_A04_LinkedList_Class/LinkedList_t.py
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
This test case will verify if the provided homework solution by a student for LinkedList.py is correct.
|
||||||
|
"""
|
||||||
|
from LinkedList import *
|
||||||
|
|
||||||
|
# Instantiate an empty list
|
||||||
|
llist = LinkedList()
|
||||||
|
|
||||||
|
# Insert some integer values in a specific order
|
||||||
|
llist.insertEnd(1) # Linked List: 1
|
||||||
|
llist.insertBeg(2) # Linked List: 2 1
|
||||||
|
llist.insertBeg(3) # Linked List: 3 2 1
|
||||||
|
llist.insertEnd(4) # Linked List: 3 2 1 4
|
||||||
|
|
||||||
|
llist.insertAfter(2, 4) # This call will insert 4 after the first occurrence 2 (if there are more than one 2)
|
||||||
|
# Linked List: 3 2 4 1 4
|
||||||
|
llist.insertAfter(4, 5) # This call will insert 6 after the first occurrence 4 (if there are more than one 2)
|
||||||
|
# Linked List: 3 2 4 6 1 4
|
||||||
|
# 324514
|
||||||
|
llist.printList()
|
||||||
|
|
||||||
|
# Delete item at position 2 (3rd element) (list starts from position 0)
|
||||||
|
llist.deleteIndex(2)
|
||||||
|
# 32514
|
||||||
|
llist.printList()
|
||||||
|
|
||||||
|
# Find a node with a specific value and print its index
|
||||||
|
item_to_find = 2
|
||||||
|
# 1
|
||||||
|
index = llist.find(item_to_find)
|
||||||
|
if index !=-1:
|
||||||
|
print(str(item_to_find) + " is at index: " + str(index))
|
||||||
|
else:
|
||||||
|
print(str(item_to_find) + " is not found ")
|
||||||
|
|
||||||
|
# Sort the list and print all values after sorting
|
||||||
|
llist.sort(llist.head)
|
||||||
|
# 12345
|
||||||
|
llist.printList()
|
Loading…
x
Reference in New Issue
Block a user