pythonデータ構造のリニアテーブルの順序格納構造

4849 ワード

PythonでC言語を真似して、リニアテーブルの順序記憶構造を実現します。参考にしてください。具体的な内容は以下の通りです。
本論文で採用したデータ構造のテンプレートは「データ構造教程」C言語版で、李春踞、尹為民等著である。
この記事は、線形テーブルの順序記憶構造に関する。
コード:

# !/usr/bin/env python
# -*- coding: utf-8 -*-
 
__author__ = 'MrHero'
 
 
class Node(object):
  """
          
    C             
  """
  def __init__(self, data=None):
    self.data = data
    self.next = None
 
 
class LKList(object):
  """
          
  """
 
  def __init__(self):
    """
             ,       
           ,      0
           :    [0]->  [1]->  [2]->  [3]->  [4]
    :return:
    """
    self.L = Node(None)
    self.L.next = None
    self.length = 0
 
  def is_empty(self):
    """
            
    :return:
    """
    return self.length == 0
 
  def get_length(self):
    """
            
    :return:
    """
    return self.length
 
  def insert(self, i, elem):
    """
        i      elem
    :param i:      
    :param elem:      elem
    :return:
    """
    j = 0
    p = self.L
    while j < i-1 and p is not None: #     i-1    
      j += 1
      p = p.next
    if p is None:  #          i-1    
      raise IndexError("Index is out of range!")
    else:  #         i-1    
      tmp = Node(elem)
      tmp.next = p.next
      p.next = tmp
      self.length += 1
 
  def delete(self, i):
    """
             
    :param i:     
    :return:           
    """
    if self.is_empty():
      raise IndexError("The list is empty!")
    elif 0 < i <= self.length:
      j = 1
      p = self.L
      while j < i and p:
        p = p.next
        j += 1
      delelte_node = p.next
      p.next = delelte_node.next
      self.length -= 1
      return delelte_node.data
    else:
      raise IndexError("Index is out of range!")
 
  def get_elem(self, i):
    """
            
    :param i:
    :return:        
    """
    if self.is_empty():
      raise IndexError("The list is empty")
    elif 0 < i <= self.length:
      j = 0
      p = self.L
      while j < i and p:
        p = p.next
        j += 1
      print p.data
    else:
      raise IndexError("Index is out of range!")
 
  def locate_elem(self, elem):
    """
           
    :param elem:
    :return:         elem   
    """
    j = 0
    p = self.L
    while p is not None and p.data != elem:
      p = p.next
      j += 1
    if p is Node:
      return -1
    else:
      return j
 
  def create_dict_list_H(self, list):
    """
         
    :param list:
    :return:
    """
    p = self.L
    for i in range(len(list)):
      tmp = Node(list[i])
      tmp.next = p.next
      p.next = tmp
      self.length += 1
 
  def create_dict_list_E(self, list):
    """
         
    :param list:
    :return:
    """
    p = self.L
    r = p
    for i in range(len(list)):
      tmp = Node(list[i])
      r.next = tmp
      r = tmp
      self.length += 1
    r.next = None
 
  def show_lklist(self):
    if self.is_empty():
      raise IndexError("It's a empty list!")
    else:
      j = 1
      p = self.L
      while j <= self.length and p:
        p = p.next
        if p is not None:
          print p.data
        j += 1
 
 
if __name__ == '__main__':
  lk = LKList()
  #
  # lk.create_dict_list_E([1, 2, 3, 4])
  # print "-----"
  # lk.get_elem(1)
  # lk.get_elem(2)
  # lk.get_elem(3)
  # lk.get_elem(4)
  # print "-------"
  # lk.show_lklist()
  # lk.insert(3, 5)
  # print "-------"
  # lk.show_lklist()
  # lo = lk.locate_elem(5)
  # print "location is %d" % lo
  # lk.delete(4)
  # print "-------"
  # lk.show_lklist()
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。