Python数据结构之单链表详解


Posted in Python onSeptember 12, 2017

本文实例为大家分享了Python数据结构之单链表的具体代码,供大家参考,具体内容如下

# 节点类
class Node():
  __slots__=['_item','_next'] # 限定Node实例的属性
  def __init__(self,item):
    self._item = item
    self._next = None # Node的指针部分默认指向None
  def getItem(self):
    return self._item
  def getNext(self):
    return self._next
  def setItem(self,newitem):
    self._item = newitem
  def setNext(self,newnext):
    self._next=newnext

# 单链表
class SingleLinkedList():
  def __init__(self):
    self._head = None #初始化链表为空 始终指向链表的头部
    self._size = 0 # 链表大小

  # 返回链表的大小
  def size(self):
    current = self._head
    count = 0
    while current != None:
      count += 1
      current = current.getNext()
    return count

  # 遍历链表
  def travel(self):
    current = self._head
    while current != None:
      print(current.getItem())
      current = current.getNext()
  # 检查链表是否为空
  def isEmpty(self):
    return self._head == None

  # 在链表前端添加元素
  def add(self,item):
    temp = Node(item) # 创建新的节点
    temp.setNext(self._head) # 新创建的next指针指向_head
    self._head = temp # _head指向新创建的指针

  # 在链表尾部添加元素
  def append(self,item):
    temp = Node(item)
    if self.isEmpty():
      self._head = temp # 若为空表就直接插入
    else:
      current = self._head
      while current.getNext() != None:
        current = current.getNext() # 遍历列表
      current.setNext(temp) # 此时current为链表最后的元素,在末尾插入

  # 检索元素是否在链表中
  def search(self,item):
    current = self._head
    founditem = False
    while current != None and not founditem:
      if current.getItem() == item:
        founditem = True
      else:
        current = current.getNext()
    return founditem

  # 索引元素在表中的位置
  def index(self,item):
    current = self._head
    count = 0
    found = None
    while current != None and not found:
      count += 1
      if current.getItem() == item:
        found = True
      else:
        current = current.getNext()
    if found:
      return count
    else:
      return -1 # 返回-1表示不存在

  # 删除表中的某项元素
  def remove(self,item):
    current = self._head
    pre = None
    while current!=None:
      if current.getItem() == item:
        if not pre:
          self._head = current.getNext()
        else:
          pre.setNext(current.getNext())
        break
      else:
        pre = current
        current = current.getNext()

  # 在链表任意位置插入元素
  def insert(self,pos,item):
    if pos <= 1:
      self.add(item)
    elif pos > self.size():
      self.append(item)
    else:
      temp = Node(item)
      count = 1
      pre = None
      current = self._head
      while count < pos:
        count += 1
        pre = current
        current = current.getNext()
      pre.setNext(temp)
      temp.setNext(current)


if __name__=='__main__':
  a=SingleLinkedList()
  for i in range(1,10):
    a.append(i)
  print('链表的大小',a.size())
  a.travel()
  print(a.search(6))
  print(a.index(5))
  a.remove(4)
  a.travel()
  a.insert(4,100)
  a.travel()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python开发常用的一些开源Package分享
Feb 14 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
Python实现针对中文排序的方法
May 09 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
Django values()和value_list()的使用
Mar 31 Python
Python求凸包及多边形面积教程
Apr 12 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
python处理Excel xlrd的简单使用
Sep 12 #Python
Python3.6简单操作Mysql数据库
Sep 12 #Python
Python文件和流(实例讲解)
Sep 12 #Python
Anaconda多环境多版本python配置操作方法
Sep 12 #Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 #Python
python监控linux内存并写入mongodb(推荐)
Sep 11 #Python
python学习教程之Numpy和Pandas的使用
Sep 11 #Python
You might like
如何设置mysql允许外网访问
2013/06/04 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
Python中实现对list做减法操作介绍
2015/01/09 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
解决python中使用PYQT时中文乱码问题
2019/06/17 Python
python中的colorlog库使用详解
2019/07/05 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
大学生实习期自我评价范文
2013/10/03 职场文书
自主招生自荐书
2013/11/29 职场文书
青年创业培训欢迎词
2014/01/10 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
单位租车协议书
2015/01/29 职场文书
工地食品安全责任书
2015/05/09 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers