Python数据结构之单链表

单链表有后继结点,无前继结点。

以下实现:

  • 创建单链表
  • 打印单链表
  • 获取单链表的长度
  • 判断单链表是否为空
  • 在单链表后插入数据
  • 获取单链表指定位置的数据
  • 获取单链表指定元素的索引
  • 删除单链表指定位置的元素
  • 更新单链表指定位置的元素
  • 清空单链表
class Node(object):
"""定义类来描述指针"""
def __init__(self, data, p=None):
self.data = data
self.next = p class LinkList(object):
"""单链表""" def __init__(self):
self.head = None # 初始化单链表
def create(self, data):
self.head = Node(data[0])
p = self.head
for i in data[1:]:
p.next = Node(i)
p = p.next # 打印单链表
def print(self):
p = self.head
while p != None:
print(p.data)
p = p.next # 获取单链表的长度
def len(self):
p = self.head
length = 0
while p != None:
length += 1
p = p.next
return length # 判断单链表是否为空
def is_empty(self):
return self.len() == 0 # 在单链表后插入数据
def append(self, item):
if self.is_empty():
self.head = Node(item)
else:
p = self.head
while p.next != None:
p = p.next
p.next = Node(item) # 获取单链表指定位置的数据
def getItem(self, index):
if self.is_empty():
print("单链表为空")
return
if index >= self.len() or index < 0:
print("索引超过单链表长度")
return
p = self.head
count = 0
while count != index:
p = p.next
count += 1
return p.data # 获取单链表指定元素的索引
def find(self, item):
p = self.head
index = 0
while p != None:
if p.data == item:
return index
p = p.next
index += 1 print("单链表中不存在" + repr(item)) # 在单链表指定位置插入元素
def insert(self, index, item):
if self.is_empty():
print("单链表为空")
return
if index >= self.len() or index < 0:
print("索引超过单链表长度")
return
if index == 0:
self.head = Node(item, self.head)
else:
p = self.head
count = 0
while count < index-1:
p = p.next
count += 1
p.next = Node(item, p.next) # 删除单链表指定位置的元素
def delete(self, index):
if self.is_empty():
print("单链表为空")
return
if index >= self.len() or index < 0:
print("索引超过单链表长度")
return
if index == 0:
self.head = self.head.next
else:
p = self.head
count = 0
while count < index-1:
p = p.next
count += 1
p.next = p.next.next # 更新单链表指定位置的元素
def update(self, index, data):
if self.is_empty():
print("单链表为空")
return
if index > self.len() or index < 0:
print("索引超过单链表长度")
return
p = self.head
count = -1
while count < index-1:
p = p.next
count += 1
p.data = data # 清空单链表
def clear(self):
self.head = None L = LinkList()
L.create([1, 2, 3])
print("打印单链表:")
L.print()
print("获取单链表的长度:")
print(L.len())
print("单链表是否为空")
print(L.is_empty())
print("在单链表后插入数据")
L.append(4)
L.print()
index = 1
print("获取第" + repr(index) + "个位置的数据")
print(L.getItem(index))
item = 3
print("获取单链表中元素" + repr(item) + "的索引")
print(L.find(item)) index = 2
item = 10
print("在单链表的" + repr(index) + "位置插入数据" + repr(item))
L.insert(index, item)
L.print()
index = 2
print("删除单链表"+repr(index)+"位置的元素")
L.delete(index)
L.print()
index = 2
item = 100
print("更新单链表"+repr(index)+"位置的元素为"+repr(item))
L.update(index, item)
L.print()
print("清空单链表")
L.clear()
L.print()

程序输出结果:

打印单链表:
1
2
3
获取单链表的长度:
3
单链表是否为空
False
在单链表后插入数据
1
2
3
4
获取第1个位置的数据
2
获取单链表中元素3的索引
2
在单链表的2位置插入数据10
1
2
10
3
4
删除单链表2位置的元素
1
2
3
4
更新单链表2位置的元素为100
1
2
100
4
清空单链表

Python数据结构之单链表的更多相关文章

  1. python 数据结构之单链表的实现

    链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就 ...

  2. python——数据结构之单链表的实现

    链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址 信息,所以用一个变量 ...

  3. python数据结构与算法——链表

    具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向 ...

  4. javascript数据结构之单链表

    下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下. //数 ...

  5. 数据结构之单链表的实现-java

    一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...

  6. 【数据结构】单链表介绍及leetcode206题反转单链表python实现

    题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...

  7. 数据结构:单链表结构字符串(python版)添加了三个新功能

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

  8. 数据结构:单链表结构字符串(python版)改进

    此篇文章的replace实现了字符串类的多次匹配,但依然有些不足. 因为python字符串对象为不变对象,所以replace方法并不修改原先的字符串,而是返回修改后的字符串. 而此字符串对象时用单链表 ...

  9. 数据结构:单链表结构字符串(python版)

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

随机推荐

  1. 机器学习--Xgboost调参

    Xgboost参数 'booster':'gbtree', 'objective': 'multi:softmax', 多分类的问题 'num_class':10, 类别数,与 multisoftma ...

  2. Vue+DataTables warning:table id=xxxx -Cannot reinitialize DataTable.报错解决方法

    问题描述: 使用DataTables来写列表,用vue来渲染数据,有搜索功能,每次点击搜索就会报错,如下图所示. 问题排查: 找了一系列原因,最后发现是我每次请求完数据之后都会添加分页功能,从而导致了 ...

  3. Java内存的 静态方法和实例方法的区别及使用场景

    注意:变量指基本数据类型非对象,局部变量不能被静态修饰 1.(静态)成员变量存放在data segment区(数据区),字符串常量也存放在该区 2.非静态变量,new出来的对象存放在堆内存,所有局部变 ...

  4. python基础与docker

    创建虚拟环境python3 -m venv venv (说明:python 2.X 并不支持) 激活虚拟环境macOS/Linux: source venv/bin/activateWindows: ...

  5. Docker容器的基本了解和命令

    一.docker和虚拟机的对比 特性 容器 虚拟机 启动 秒级 分钟级 硬盘使用 一般为MB 一般为GB 性能 接近原生 弱于 系统支持量 单机支持上千个容器 一般几十个 更高效的利用系统资源 更快速 ...

  6. ASCII,Unicode,GBK和UTF-8字符编码的区别和联系

    如果经常写python2,肯定会遇到各种“奇怪”的字符编码问题,每次都通过谷歌解决了,但是为什么会造成这种乱码.decode/encode失败等等,本文就字符和字符编码做一个总结,更加清晰区分诸多的编 ...

  7. nginx+lua+kafka 编写 在线日志上报系统

    案例一 rewrite_by_lua ' --引入openresty自带的json处理对象 local cjson = require("cjson") local produce ...

  8. About Feature Scaling and Normalization

    在进行数据处理之前,一定要想一想,你的算法是用来做什么,这样才能选择如何对数据进行预处理. 参考网站: http://sebastianraschka.com/Articles/2014_about_ ...

  9. 验证当前启动APP的Package 和 Activity

    1. 打开手机USB 调试开关 2. 执行: adb devices 3.启动你的测试APP (如手机QQ) 4.执行:adb shell dumpsys window |findstr mCurre ...

  10. django xadmin查找当前用户所在组

    self.request.user:获取当前登录用户用户名 qs = Group.objects.get(user=self.request.user)获取当前登录用户所在组qs.name 获取当前登 ...