示例#1
0
    def add(self, data):
        newNode = Node(data)

        if self.isEmpty():
            self.__head = newNode
        else:
            newNode.setNext(self.__head)
            self.__head.setPrev(newNode)
            self.__head = newNode
示例#2
0
    def append(self, data):
        newNode = Node(data)

        if self.isEmpty():
            self.__head = newNode
        else:
            currentHead = self.__head
            while currentHead.getNext() is not None:
                currentHead = currentHead.getNext()

            currentHead.setNext(newNode)
            newNode.setPrev(currentHead)
示例#3
0
文件: Hashmap.py 项目: SamLgr/quetzal
    def insert(self, toAdd):
        #Setting variables
        key = toAdd.key
        objectToAdd = toAdd.myObject

        #If hash is bigger than allowed max_size, modulo it
        if self.hash(key) > self.max_size:
            newToAdd = MapObject(key % self.max_size, objectToAdd)
            return insert(newToAdd)

        #Separate chaining
        if self.myType == 3:
            if self.v[self.hash(key)] == None:
                l = List()
                node = Node(toAdd)
                l.append(node)
            else:
                l = self.v[self.hash(key)]
                node = Node(toAdd)
                l.append(node)

            self.v[self.hash(key)] = l

            return True

        #Probing
        if self.v[self.hash(key)] != None:
            i = self.hash(key)

            #Linear probing
            if self.myType == 1:
                while (self.v[i] != None):
                    i += 1
                self.v[i] = toAdd

            #Quadratic probing
            if self.myType == 2:
                while (self.v[i] != None):
                    i += 1
                    i = i**2 % self.max_size
                self.v[i] = toAdd

            return True

        #No probing or chaining needed, normal insert
        self.v[self.hash(key)] = toAdd
        return True
示例#4
0
 def enqueue(self, data):
     new_node = Node(data)
     if self.isEmpty():  # no data present
         self.frontPtr = new_node
         self.backPtr = self.frontPtr
     else:  # some nodes exists
         self.backPtr.setNext(new_node)
         self.backPtr = new_node
示例#5
0
 def append(self, data):
     new_node = Node(data)
     if self.head is None:  # no data present
         self.head = new_node
         self.tail = self.head
     else:  # data present
         new_node.setPrev(self.tail)
         self.tail.setNext(new_node)
         self.tail = new_node
    def append(self, data):
        newNode = Node(data)

        if self.isEmpty():
            self.add(data)
        else:
            newNode.setNext(self.__head)
            # head的前驱就是链表尾部
            newNode.setPrev(self.__head.getPrev())
            self.__head.getPrev().setNext(newNode)
            self.__head.setPrev(newNode)
示例#7
0
 def insert(self, index, item):
     length = self.getLength()
     if index < 0 or index > length:
         return False
     elif index == length:
         self.append(item)
         return True
     elif index == 0:
         self.__insertFront(item)
         return True
     new_node = Node(item)
     count = 0
     current_node = self.head
     while count != index:
         count += 1
         current_node = current_node.getNext()
     parent = current_node.prev
     parent.next = new_node
     new_node.prev = parent
     new_node.next = current_node
     current_node.prev = new_node
     return True
示例#8
0
    def insert(self, data, pos=0):
        if pos <= 0:
            self.add(data)
        elif pos > self.size() - 1:
            self.append(data)
        else:
            newNode = Node(data)
            preHead = self.__head
            count = 0

            # preHead指向指定位置前一个位置pos-1
            while count < pos - 1:
                count += 1
                preHead = preHead.getNext()

            newNode.setPrev(preHead)
            newNode.setNext(preHead.getNext())
            preHead.getNext().setPrev(newNode)
            preHead.setNext(newNode)
示例#9
0
 def createList(self, data):
     new_node = Node(data)
     self.head = new_node
     self.tail = self.head
示例#10
0
 def __insertFront(self, data):
     new_node = Node(data)
     new_node.setNext(self.head)
     self.head.setPrev(new_node)
     self.head = new_node