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使用函数默认值实现函数静态变量的方法
Aug 18 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
Python正则简单实例分析
Mar 21 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
Python面向对象封装操作案例详解
Dec 31 Python
pytorch下使用LSTM神经网络写诗实例
Jan 14 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
python json 递归打印所有json子节点信息的例子
Feb 27 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 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编实现程动态图像的创建代码
2008/09/28 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
php构造函数的继承方法
2015/02/09 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
php中this关键字用法分析
2016/12/07 PHP
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
简单学习vue指令directive
2016/11/03 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
python实现移动木板小游戏
2020/10/09 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
师范生实习的个人自我鉴定
2013/10/20 职场文书
社团成立邀请函
2014/01/08 职场文书
实习鉴定评语
2014/01/19 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
企业宣传口号
2014/06/12 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
西双版纳导游词
2015/02/03 职场文书
员工辞职信范文
2015/03/02 职场文书
疾病证明书
2015/06/19 职场文书