算法中数据存储结构有多种形式,数组、链表、堆、栈、树等。在诸多结构形式中,我认为数组与链表是基础,其他的结构都是在其之上演变过来。
链表分为单链表和双链表。链表由节点组成,每个节点包含上个节点地址,本身存储的元素和下个节点地址。在链表中可以实现增加节点、删除节点、查找节点及修改节点的操作(大多数数据结构与算法也基本围绕‘增删改查’来进行设计)。
# _*_ coding:utf-8 _*_
class Node:
def __init__(self,preNode,nextNode,element):
self.preNode=preNode
self.nextNode=nextNode
self.element=element
class MyLinkedList:
def __init__(self):
self.__size=0
self.firstNode=Node(None,None,None)
self.currentNode=self.firstNode
def addNode(self,ele=0):
newNode =Node(self.currentNode,Node(None,None,None),ele)
self.currentNode.nextNode = newNode
self.currentNode=newNode
self.__size +=1
def searchNode(self,ele):
tempNode = self.firstNode.nextNode
while(tempNode !=None):
if ele == tempNode.element:
return True
tempNode = tempNode.nextNode
return False
def removeNode(self,ele):
tempNode = self.firstNode.nextNode
while (tempNode != None):
if ele==tempNode.element:
tempNode.preNode.nextNode=tempNode.nextNode
tempNode.nextNode.preNode=tempNode.preNode
self.__size -= 1
return True
tempNode = tempNode.nextNode
return False
def setNode(self,eleOld,eleNew):
tempNode = self.firstNode.nextNode
while (tempNode != None):
if eleOld == tempNode.element:
tempNode.element = eleNew
return True
tempNode = tempNode.nextNode
return False
myLink = MyLinkedList()
myLink.addNode(1)
myLink.addNode(2)
print(myLink.searchNode(1))
print(myLink.removeNode(3))
print(myLink.setNode(2,3))
print(myLink.removeNode(3))