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解析并修改XML文档的方法
Oct 15 Python
用Python抢过年的火车票附源码
Dec 07 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
python编程羊车门问题代码示例
Oct 25 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
六行python代码的爱心曲线详解
May 17 Python
Python创建数字列表的示例
Nov 28 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
pycharm配置QtDesigner的超详细方法
Jan 25 Python
python爬虫破解字体加密案例详解
Mar 02 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
Python使用protobuf序列化和反序列化的实现
May 19 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面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
php备份数据库类分享
2015/04/14 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
prototype 中文参数乱码解决方案
2009/11/09 Javascript
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
python PIL模块与随机生成中文验证码
2016/02/27 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
2014庆六一活动方案
2014/03/02 职场文书
愚人节活动策划方案
2014/03/11 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python