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开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
django admin组件使用方法详解
Jul 19 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
python将图片转base64,实现前端显示
Jan 09 Python
Python处理mysql特殊字符的问题
Mar 02 Python
python判断正负数方式
Jun 03 Python
零基础学Python之前需要学c语言吗
Jul 21 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
python实现学员管理系统(面向对象版)
Jun 05 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
php5 mysql分页实例代码
2008/04/10 PHP
php csv操作类代码
2009/12/14 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
jQuery Ajax之load()方法
2009/10/12 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
python图像处理之镜像实现方法
2015/05/30 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
Python多线程多进程实例对比解析
2020/03/12 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
某公司面试题
2012/03/05 面试题
党校学习思想汇报
2014/01/06 职场文书
部门年终奖分配方案
2014/05/07 职场文书
党员作风建设整改方案
2014/10/27 职场文书
2015年植树节活动总结
2015/02/06 职场文书
党校个人总结
2015/03/04 职场文书
如何做好工作总结!
2019/04/10 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
golang中字符串MD5生成方式总结
2021/07/04 Golang