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中的两个内置模块介绍
Apr 05 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
python scrapy爬虫代码及填坑
Aug 12 Python
python实现超市管理系统(后台管理)
Oct 25 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
浅谈Python中的模块
Jun 10 Python
Python如何使用input函数获取输入
Aug 06 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 Python
浅谈Python响应式类库RxPy
Jun 14 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/12/05 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
python实现字符串和日期相互转换的方法
2015/05/13 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
详解python3实现的web端json通信协议
2016/12/29 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
python模块之time模块(实例讲解)
2017/09/13 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
python 从list中随机取值的方法
2020/11/16 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
工商管理实习自我鉴定
2013/09/28 职场文书
求职自荐信范文格式
2013/11/29 职场文书
秋季运动会广播稿
2014/02/22 职场文书
项目工作说明书
2014/07/29 职场文书
审计班子对照检查材料
2014/08/27 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
python flappy bird小游戏分步实现流程
2022/02/15 Python