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中字典(dict)合并的四种方法总结
Aug 10 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
浅谈Python中的全局锁(GIL)问题
Jan 11 Python
python对文件目录的操作方法实例总结
Jun 24 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
Python values()与itervalues()的用法详解
Nov 27 Python
python神经网络编程实现手写数字识别
May 27 Python
Python request中文乱码问题解决方案
Sep 17 Python
python实现图片素描效果
Sep 26 Python
Pytorch实验常用代码段汇总
Nov 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
一个分页的论坛
2006/10/09 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
学习ExtJS 访问容器对象
2009/10/07 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
使用Python神器对付12306变态验证码
2016/01/05 Python
python使用super()出现错误解决办法
2017/08/14 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
Python如何实现FTP功能
2020/05/28 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
美国在线珠宝商店:SZUL
2017/02/11 全球购物
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
大学应届生的自我评价
2014/03/06 职场文书
劳资协议书范本
2014/04/23 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
Vue.Draggable实现交换位置
2022/04/07 Vue.js
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL