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中处理时间之clock()方法的使用
May 22 Python
Python实现Linux中的du命令
Jun 12 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
Python查找文件中包含中文的行方法
Dec 19 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
python日志模块logbook使用方法
Sep 19 Python
解决django model修改添加字段报错的问题
Nov 18 Python
Python中base64与xml取值结合问题
Dec 22 Python
Python脚本破解压缩文件口令实例教程(zipfile)
Jun 14 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 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
PHP4中实现动态代理
2006/10/09 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
python集合能干吗
2020/07/19 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
财务会计专业毕业生自荐信
2013/10/02 职场文书
法律专业实习鉴定
2013/12/22 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
运动会方队口号
2014/06/07 职场文书
小学生成绩单评语
2014/12/31 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
基于Python实现流星雨效果的绘制
2022/03/18 Python
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技