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实现控制台输入密码的方法
May 29 Python
Python采用Django制作简易的知乎日报API
Aug 03 Python
一文总结学习Python的14张思维导图
Oct 17 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
python生成器与迭代器详解
Jan 01 Python
Python实现TCP通信的示例代码
Sep 09 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
Python TestSuite生成测试报告过程解析
Jul 23 Python
python openpyxl模块的使用详解
Feb 25 Python
快速一键生成Python爬虫请求头
Mar 04 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 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使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
西安交大自主招生自荐信
2014/01/27 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android