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判断操作系统类型代码分享
Nov 22 Python
Python实现从URL地址提取文件名的方法
May 15 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
May 08 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
python 列表转为字典的两个小方法(小结)
Jun 28 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
基于python实现学生信息管理系统
Nov 22 Python
Python将列表中的元素转化为数字并排序的示例
Dec 25 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
Python反爬虫伪装浏览器进行爬虫
Feb 28 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 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
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
Javascript 入门基础学习
2010/03/10 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
原生js生成图片验证码
2020/10/11 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
python assert的用处示例详解
2019/04/01 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
高中军训感想800字
2014/02/23 职场文书
助学金感谢信
2015/01/20 职场文书