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微信公众号开发平台
Jan 25 Python
python 实现登录网页的操作方法
May 11 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
python 实现selenium断言和验证的方法
Feb 13 Python
python的内存管理和垃圾回收机制详解
May 18 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
python程序文件扩展名知识点详解
Feb 27 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
django下创建多个app并设置urls方法
Aug 02 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 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解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
基于jquery循环map功能的代码
2011/02/26 Javascript
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
简单谈谈python中的多进程
2016/11/06 Python
Django 视图层(view)的使用
2018/11/09 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
python关于变量名的基础知识点
2020/03/03 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
项目经理的岗位职责
2013/11/23 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
电工技术比武方案
2014/05/11 职场文书
教师节宣传方案
2014/05/23 职场文书
推荐信范文大全
2015/03/27 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python