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中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
pandas计数 value_counts()的使用
Jun 24 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
kafka监控获取指定topic的消息总量示例
Dec 23 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 Python
python 下载文件的几种方法汇总
Jan 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
微信扫描二维码登录网站代码示例
2013/12/30 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
JS中Location使用详解
2015/05/12 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
Python 正则表达式入门(中级篇)
2016/12/07 Python
python实现多线程抓取知乎用户
2016/12/12 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Android分包MultiDex策略详解
2017/10/30 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
招聘专员岗位职责
2014/03/07 职场文书
奠基仪式主持词
2014/03/20 职场文书
运动会入场口号
2014/06/07 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android
python 离散点图画法的实现
2022/04/01 Python