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使用in操作符时元组和数组的区别分析
May 19 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
Python高级特性与几种函数的讲解
Mar 08 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
python SVD压缩图像的实现代码
Nov 05 Python
PYcharm 激活方法(推荐)
Mar 23 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 Python
scrapy头部修改的方法详解
Dec 06 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模板类代码
2008/09/07 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
python mysqldb连接数据库
2009/03/16 Python
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
.NET初级开发工程师面试题
2014/04/18 面试题
奖学金自我鉴定范文
2013/10/03 职场文书
辅导员评语
2014/05/04 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
骨干教师申报材料
2014/12/17 职场文书
六一儿童节主持开场白
2015/05/28 职场文书