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中使用OpenCV进行人脸检测的例子
Apr 18 Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
python调用百度REST API实现语音识别
Aug 30 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
python列表生成器迭代器实例解析
Dec 19 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
Java Spring项目国际化(i18n)详细方法与实例
Mar 20 Python
详解python的内存分配机制
May 10 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 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
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
php实现用户登陆简单实例
2017/04/04 PHP
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
Python @property装饰器原理解析
2020/01/22 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
毕业生找工作推荐信
2013/11/21 职场文书
加拿大留学自荐信
2014/01/28 职场文书
《小池塘》教学反思
2014/02/28 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
大学生毕业求职信
2014/06/12 职场文书
商家认证委托书格式
2014/10/16 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
Java实现多线程聊天室
2021/06/26 Java/Android
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
解决WINDOWS电脑开机后桌面没有任何图标
2022/04/09 数码科技
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang