I'm currently implementing data structures and algorithms I studed in my college course. This is my implementation of a singly linked list and a stack. I would appreciate some feedback in terms of the code quality.
My LinkedList:
from random import randint
class Node:
def __init__(self, x):
self.current = x
self.next = None
class LinkedList:
def __init__(self, x):
self.head = Node(x)
def insert(self, x):
new_entry = Node(x)
new_entry.next = self.head
self.head = new_entry
def search(self, x):
node = self.head
while node.current is not x:
if node.next is None:
break
node = node.next
if node.current is x:
return x
else:
return None
def contains(self, x):
retrieved = self.search(x)
return retrieved is x
def delete(self, x):
try:
node = self.head
while node.next.current is not x:
node = node.next
if node.next.current is x:
node.next = node.next.next
except AttributeError:
print str(x) + " is not in the linked list"
def traverse(self):
node = self.head
text = "" # type: str
while node is not None:
text += str(node.current) + "->"
node = node.next
return text
My stack:
class Stack:
def __init__(self):
self.data = []
def push(self, e):
self.data.append(e)
def pop(self):
return self.data.pop()
def prnt(self):
print self.data
def is_integer(val):
try:
int(val)
return True
except ValueError:
return False
def is_binary_operator(val):
return val is '+' or val is '-' or val is '*' or val is '/'
def postfixEval(stack, expression):
symbols = expression.split()
for symbol in symbols:
if is_integer(symbol):
s = int(symbol)
stack.push(s)
elif is_binary_operator(symbol):
s2 = stack.pop()
s1 = stack.pop()
if symbol is '+':
a = s1 + s2
elif symbol is '-':
a = s1 - s2
elif symbol is '*':
a = s1 * s2
elif symbol is '/':
a = s1 / s2
stack.push(a)
return stack.pop()