python数据结构之线性表的顺序存储结构

 更新时间:2018年09月28日 10:32:26   作者:PyTi  
这篇文章主要为大家详细介绍了python数据结构之线性表的顺序存储结构,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python图像处理之边缘检测原理详解

    Python图像处理之边缘检测原理详解

    边缘检测是图像处理和计算机视觉当中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。本文将通过示例和大家介绍一下边缘检测的原理,希望对大家有所帮助
    2022-12-12
  • python处理html转义字符的方法详解

    python处理html转义字符的方法详解

    这篇文章主要介绍了python处理html转义字符的方法,结合实例形式较为详细的分析了Python针对常见HTML转义字符处理技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • 解决Keras中Embedding层masking与Concatenate层不可调和的问题

    解决Keras中Embedding层masking与Concatenate层不可调和的问题

    这篇文章主要介绍了解决Keras中Embedding层masking与Concatenate层不可调和的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python批量处理打开多个文件

    python批量处理打开多个文件

    这篇文章主要介绍了python批量处理打开多个文件,文章围绕主题的相关内容展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-06-06
  • python模块hashlib(加密服务)知识点讲解

    python模块hashlib(加密服务)知识点讲解

    在本篇文章里小编给大家分享的是关于python模块hashlib(加密服务)知识点内容,有需要的朋友们可以学习下。
    2019-11-11
  • Django多app路由分发(纯后端)

    Django多app路由分发(纯后端)

    本文主要介绍了Django多app路由分发,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • python数字图像处理之骨架提取与分水岭算法

    python数字图像处理之骨架提取与分水岭算法

    这篇文章主要介绍了python数字图像处理之骨架提取与分水岭算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Python+eval函数实现动态地计算数学表达式详解

    Python+eval函数实现动态地计算数学表达式详解

    Python的 eval() 允许从基于字符串或基于编译代码的输入中计算任意Python表达式。当从字符串或编译后的代码对象的任何输入中动态计算Python表达式时,此函数非常方便。本文将利用eval实现动态地计算数学表达式,需要的可以参考一下
    2022-09-09
  • 剖析Python的Tornado框架中session支持的实现代码

    剖析Python的Tornado框架中session支持的实现代码

    这篇文章主要介绍了剖析Python的Tornado框架中session支持的实现代码,这样就可以使用Django等框架中大家所熟悉的session了,需要的朋友可以参考下
    2015-08-08
  • github配置使用指南

    github配置使用指南

    Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。目前,包括Rubinius、Merb和Bitcoin在内的很多知名项目都使用了Git,作为一个程序猿,不会github那确实有点坑了
    2014-11-11

最新评论