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的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
python计算方程式根的方法
May 07 Python
python 调用HBase的简单实例
Dec 18 Python
python中关于for循环的碎碎念
Jun 30 Python
pytorch 自定义参数不更新方式
Jan 06 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
python如何随机生成高强度密码
Aug 19 Python
Python基础之数据结构详解
Apr 28 Python
python flask框架快速入门
May 14 Python
python实现Nao机器人的单目测距
Sep 04 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获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
js中function()使用方法
2013/12/24 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
学习python (2)
2006/10/31 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
Python实现感知机(PLA)算法
2017/12/20 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
博士毕业生自我鉴定范文
2014/04/13 职场文书
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
党建工作先进材料
2014/05/02 职场文书
关于环保的演讲稿
2014/05/10 职场文书
升职演讲稿范文
2014/05/23 职场文书
档案接收函格式
2015/01/30 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS