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


Posted in Python onSeptember 28, 2018

用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支持断点续传的多线程下载示例
Jan 16 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
python tornado修改log输出方式
Nov 18 Python
Python for i in range ()用法详解
Sep 18 Python
Django中使用MySQL5.5的教程
Dec 18 Python
Python生成器generator原理及用法解析
Jul 20 Python
Python 使用生成器代替线程的方法
Aug 04 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 Python
python自动计算图像数据集的RGB均值
Jun 18 Python
python实现顺序表的简单代码
Sep 28 #Python
linux安装Python3.4.2的操作方法
Sep 28 #Python
python求质数的3种方法
Sep 28 #Python
python数据结构学习之实现线性表的顺序
Sep 28 #Python
python实现单链表中删除倒数第K个节点的方法
Sep 28 #Python
使用Python处理BAM的方法
Sep 28 #Python
python版本单链表实现代码
Sep 28 #Python
You might like
十天学会php之第三天
2006/10/09 PHP
PHP 万年历实现代码
2012/10/18 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
Smarty模板语法详解
2019/07/20 PHP
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
JS闭包与延迟求值用法示例
2016/12/22 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
python实现梯度下降法
2020/03/24 Python
python实现udp聊天窗口
2020/03/31 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
高分子材料个人求职信范文
2013/09/25 职场文书
学术会议邀请函范文
2014/01/22 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
2016年春节问候语
2015/11/11 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android