Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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()

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote