Python实现数据结构线性链表(单链表)算法示例


Posted in Python onMay 04, 2019

本文实例讲述了Python实现数据结构线性链表(单链表)算法。分享给大家供大家参考,具体如下:

初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码。

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author: Hui
# Date:  2017-10-13
# 结点类,
class Node:
  def __init__(self, data):
    self.data = data      # 数据域
    self.next = None      # 指针域
  def get_data(self):
    return self.data
# 链表类
class List:
  def __init__(self, head):
    self.head = head      # 默认初始化头结点
  def is_empty(self):     # 空链表判断
    return self.get_len() == 0
  def get_len(self):     # 返回链表长度
    length = 0
    temp = self.head
    while temp is not None:
      length += 1
      temp = temp.next
    return length
  def append(self, node):     # 追加结点(链表尾部追加)
    temp = self.head
    while temp.next is not None:
      temp = temp.next
    temp.next = node
  def delete(self, index):      # 删除结点
    if index < 1 or index > self.get_len():
      print "给定位置不合理"
      return
    if index == 1:
      self.head = self.head.next
      return
    temp = self.head
    cur_pos = 0
    while temp is not None:
      cur_pos += 1
      if cur_pos == index-1:
        temp.next = temp.next.next
      temp = temp.next
  def insert(self, pos, node):     # 插入结点
    if pos < 1 or pos > self.get_len():
      print "插入结点位置不合理..."
      return
    temp = self.head
    cur_pos = 0
    while temp is not Node:
      cur_pos += 1
      if cur_pos == pos-1:
        node.next = temp.next
        temp.next =node
        break
      temp = temp.next
  def reverse(self, head):     # 反转链表
    if head is None and head.next is None:
      return head
    pre = head
    cur = head.next
    while cur is not None:
      temp = cur.next
      cur.next = pre
      pre = cur
      cur = temp
    head.next = None
    return pre
  def print_list(self, head):      # 打印链表
    init_data = []
    while head is not None:
      init_data.append(head.get_data())
      head = head.next
    return init_data
if __name__ == '__main__':
  head = Node("head")
  list = List(head)
  print '初始化头结点:\t', list.print_list(head)
  for i in range(1, 10):
    node = Node(i)
    list.append(node)
  print '链表添加元素:\t', list.print_list(head)
  print '链表是否空:\t', list.is_empty()
  print '链表长度:\t', list.get_len()
  list.delete(9)
  print '删除第9个元素:\t',list.print_list(head)
  node = Node("insert")
  list.insert(3, node)
  print '第3个位置插入‘insert'字符串 :\t', list.print_list(head)
  head = list.reverse(head)
  print '链表反转:', list.print_list(head)

执行结果:

Python实现数据结构线性链表(单链表)算法示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python语言描述KNN算法与Kd树
Dec 13 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
Python实现PS滤镜中的USM锐化效果
Dec 04 Python
python里glob模块知识点总结
Jan 05 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 #Python
Python实现将HTML转成PDF的方法分析
May 04 #Python
Python第三方库face_recognition在windows上的安装过程
May 03 #Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 #Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
May 03 #Python
利用python将图片版PDF转文字版PDF
May 03 #Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 #Python
You might like
PHP 图像尺寸调整代码
2010/05/26 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
浅谈json_encode用法
2015/03/05 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
初步理解Python进程的信号通讯
2015/04/09 Python
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
浅谈Python中(&amp;,|)和(and,or)之间的区别
2019/08/07 Python
python实现多线程端口扫描
2019/08/31 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
求职信模版
2013/11/30 职场文书
KTV的创业计划书范文
2014/02/02 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技