Text Editor Buffer Develop and test a Buffer ADT with linked lists, not with Pyt
ID: 3738061 • Letter: T
Question
Text Editor Buffer
Develop and test a Buffer ADT with linked lists, not with Python lists, using the Stack ADT, with the following description:
class Buffer:
def insert(self, c) # insert c at the cursor
def get(self) # return the character at the cursor
delete(self) # delete and return the character at the cursor
left (self, k) # move the cursor left k positions
right (self, k) # move the cursor right k positions
size(self) # return the number of characters in the buffer
Hint: use two stacks.
Explanation / Answer
here is the code for the above stated problem in python,
class Buffer:
def __init__(self):
self.head = None
def addToStart(self, data):
tempNode = Node(data)
tempNode.setLink(self.head)
self.head = tempNode
del tempNode
def addToEnd(self, data):
start = self.head
tempNode = Node(data)
while start.getNextNode():
start = start.getNextNode()
start.setLink(tempNode)
del tempNode
return True
def display(self):
start = self.head
if start is None:
print("Empty List!!!")
return False
while start:
print(str(start.getData()), end=" ")
start = start.link
if start:
print("-->", end=" ")
print()
def length(self):
start = self.head
size = 0
while start:
size += 1
start = start.getNextNode()
return size
def index(self, data):
start = self.head
position = 1
while start:
if start.getData() == data:
return position
else:
position += 1
start = start.getNextNode()
def remove(self, item):
start = self.head
prev = None
found = False
while not found:
if start.getData() == item:
found = True
else:
prev = start
start = start.getNextNode()
if prev is None:
self.head = start.getNextNode()
else:
prev.setLink(start.getNextNode())
return found
def Max(self):
start = self.head
largest = start.getData()
while start:
if largest < start.getData():
largest = start.getData()
start = start.getNextNode()
return largest
def Min(self):
start = self.head
smallest = start.getData()
while start:
if smallest > start.getData():
smallest = start.getData()
start = start.getNextNode()
return smallest
def push(self, data):
self.addToEnd(data)
return True
def pop(self):
start = self.head
prev = None
while start.getNextNode():
prev = start
start = start.getNextNode()
if prev is None:
self.head = None
else:
prev.setLink(None)
data = start.getData()
del start
return data
def atIndex(self, position):
start = self.head
position = int(position)
pos = 1
while pos != position:
start = start.getNextNode()
pos += 1
data = start.getData()
return data
def copy(self):
temp = Buffer()
start = self.head
temp.addToStart(start.getData())
start = start.getNextNode()
while start:
temp.addToEnd(start.getData())
start = start.getNextNode()
return temp
def clear(self):
self.head = None
return True
def removePosition(self, position):
data = self.atIndex(position)
self.remove(data)
return data
def toString(self, seperator=""):
start = self.head
finalString = ""
while start:
tempString = start.getData()
finalString += str(tempString)
start = start.getNextNode()
if start:
finalString += seperator
return finalString
def count(self, element):
start = self.head
count1 = 0
while start:
if start.getData() == element:
count1 += 1
start = start.getNextNode()
return count1
def toList(self):
start = self.head
tempList = []
while start:
tempElement = start.getData()
tempList.append(tempElement)
start = start.getNextNode()
return tempList
def toSet(self):
start = self.head
tempSet = set()
while start:
tempElement = start.getData()
if tempElement not in tempSet:
tempSet.add(tempElement)
start = start.getNextNode()
return tempSet
def reverse(self):
start = self.head
tempNode = None
prevNode = None
while start:
tempNode = start.getNextNode()
start.setLink(prevNode)
prevNode = start
start = tempNode
self.head = prevNode
return True
def sort(self):
start = self.head
beginNode = start
while beginNode:
tempNode = beginNode
tempNode2 = beginNode
smallest = beginNode.getData()
while tempNode:
if smallest > tempNode.getData():
smallest = tempNode.getData()
tempNode2 = tempNode
tempNode = tempNode.getNextNode()
temp = beginNode.getData()
beginNode.updateData(tempNode2.getData())
tempNode2.updateData(temp)
beginNode = beginNode.getNextNode()
def sorted(self):
start = self.head
tempList = self.copy()
tempList.sort()
return tempList
class Node:
def __init__(self, data=None, link=None):
self.data = data
self.link = link
def updateData(self, data):
self.data = data
def setLink(self, node):
self.link = node
def getData(self):
return self.data
def getNextNode(self):
return self.link
list = Buffer()
list.addToStart(5)
list.addToStart(4)
list.addToStart(3)
list.addToStart(2)
list.addToStart(1)
list.display()
list.addToEnd(12)
list.addToEnd(13)
list.addToEnd(3)
list.display()
print(list.length())
print(list.index(3))
print(list.atIndex(5))
print(list.remove(12))
list.removePosition(2)
list.display()
print(list.Max())
print(list.Min())
print(list.push(31))
list.display()
print(list.pop())
list.display()
list2 = list.copy()
list2.display()
list2.clear()
list2.display()
print(list.toString(","))
print(list.count(3))
newList = list.toList()
print(newList)
newSet = list.toSet()
print(newSet)
list.reverse()
list.display()
list3 = list.sorted()
list3.display()
list.sort()
list.display()
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.