2016-05-13 27 views
-2

我需要實現一個鏈接列表來搜索並將學生添加到現有的一組學生。數據學生包括學生證和姓名。例如Python Linklist與許多數據

studentList = [ 
student = ("11", "John"), 
student = ("12", "Cindy"), 
student = ("13", "Tracy"), 
] 

到目前爲止,我有以下代碼,但它只能用於單個數據,如何包含多個數據?如何成功搜索學生?

class Node(object): 

    def __init__ (self, code, name, n = None): 
     self.data = code 
     self.data = name 
     self.next_node = n 

    def get_next (self): 
     return self.next_node 

    def set_next (self, n): 
     self.next_node = n 

    def get_data (self): 
     return self.data 

    def set_data (self, d): 
     self.data = d 


class LinkedList (object): 

    def __init__(self, r = None): 
     self.root = r 
     self.size = 0 

    def get_size (self): 
     return self.size 

    def add (self, d): 
     new_node = Node (d, self.root) 
     self.root = new_node 
     self.size += 1 

    def find (self, d): 
     this_node = self.root 
     while this_node: 
      if this_node.get_data() == d: 
      return d 
     else: 
      this_node = this_node.get_next() 
     return None 

myList = LinkedList() 
myList.add(5, "Trevor") 
myList.add(10, "Trevor") 
print("size="+str(myList.get_size())) 
print(myList.find(10)) 
+0

我提出你不需要,實際上,「需要實現鏈接列表」來做到這一點。只需使用一個'list'。 –

+0

我也建議使用'namedtuple'作爲'node'對象:'從集合導入namedtuple作爲nt','node = nt('node','code name')' –

回答

0

以下是我的修改。你錯過了字符串參數。另外,您在初始代碼中有兩個數據變量。

class Node(object): 

def __init__ (self, code, name, n = None): #here you have code and name 
    self.data1 = code #you need to change this to data 1 
    self.data2 = name #you need to change this to data 2 --> they can't have the same name 
    self.next_node = n 

def get_next (self): 
    return self.next_node 

def set_next (self, n): 
    self.next_node = n 

def get_data (self): 
    return self.data1 # update this to data1 to reflect the code 

def set_data (self, d): 
    self.data1 = d 

class LinkedList (object): 

def __init__(self, r = None): 
    self.root = r 
    self.size = 0 

def get_size (self): 
    return self.size 

def add (self, d, s): # have this accept d and s (string) 
    new_node = Node (d, s, self.root) #include a string parameter 
    self.root = new_node 
    self.size += 1 

def find (self, d): 
    this_node = self.root 
    while this_node: 
     if this_node.get_data() == d: 
      return d 
    else: 
     this_node = this_node.get_next() 
    return None 
0

此代碼有一些錯誤(縮進關閉,參數未被傳遞)。請參閱評論:

class Node(object): 

    def __init__ (self, code, name, n = None): 
     self.data = code 
     self.data2 = name # using same variable twice 
     self.next_node = n 

    def get_next (self): 
     return self.next_node 

    def set_next (self, n): 
     self.next_node = n 

    def get_data (self): 
     return self.data 

    def set_data (self, d): 
     self.data = d 

class LinkedList (object): 

    def __init__(self, r = None): 
     self.root = r 
     self.size = 0 

    def get_size (self): 
     return self.size 

    def add (self, d, name): 
     new_node = Node (d, name, self.root) # you didn't pass name which is a required argument 
     self.root = new_node 
     self.size += 1 

    def find (self, d): 
     this_node = self.root 
     while this_node: 
      if this_node.get_data() == d: 
       return this_node # indentation off, don't you want the node, instead of d? 
      else: 
       this_node = this_node.get_next() 
     return None 

myList = LinkedList() 
myList.add(5, "Trevor") 
myList.add(10, "Trevor") 
print("size="+str(myList.get_size())) 
print(myList.find(10)) 

將來,請發佈您的任何錯誤消息。看起來你的代碼在運行時出現了縮進錯誤。

+0

謝謝trans1st0r,但是我如何得到函數「find」返回可讀數據,如Code = 10,Name = Trevor。我所得到的是「<__ main __。0x02DA7CF0>的節點對象」。再次感謝您的幫助 –

+0

只需在find函數中更改return語句即可返回所需的字符串。很簡單。 – trans1st0r