python数据结构与算法之单链表
表的抽象数据类型
ADT list: #一个表的抽象数据类型
List(self) #表的构造操作,创建一个空表
is_empty(self) #判断self是否为一个空表
len(self) #获得self的长度
prepend(self, elem) #将元素elem加入表中作为第一个元素
append(self, elem) #将元素elen加入表中作为最后一个元素
insert(self, elem, i) #将elem加入表中作为第i个元素,其他元素的顺序不变
del_first(self) #删除表中的首元素
del_last(self) #删除表中的尾元素
del(self, i) #删除表中第i个元素
search(self, elem) #查找元素elem在表中出现的位置,不出现时返回-1
forall(self, op) #对表中的每个元素执行操作op
1、构建结点对象
class LNode:
def __init__(self, elem, next_ = None):
self.elem = elem
self.next = next_
2、单链表的实现
class LList:
def __init__(self):
self._head = None def is_empty(self):
return self._head is None def len(self):
p = self._head
l = 0
while p is not None:
l += 1
p = p.next
return l def prepend(self, elem):
self._head = LNode(elem, self._head) def append(self, elem):
if self._head is None:
self._head = LNode(elem)
return
p = self._head
while p.next is not None:
p = p.next
p.next = LNode(elem) def insert(self, elem, i):
if i<0 or i > self.len():
raise ValueError
if i == 0:
self.prepend(elem)
else:
p = self._head
while p is not None and i > 1:
i -= 1
p = p.next
p.next = LNode(elem, p.next) def del_first(self):
if self._head is None:
raise ValueError
e = self._head.elem
self._head = self._head.next
return e def del_last(self):
if self._head is None:
raise ValueError
p = self._head
if p.next is None:
self._head = None
return p.elem
while p.next.next is not None:
p = p.next
e = p.next.elem
p.next = None
return e def del_(self, i):
if i<0 or i >= self.len() or self._head is None:
raise ValueError
if i == 0:
self.del_first()
else:
p = self._head
while p is not None and i > 1:
i -= 1
p = p.next
e = p.elem
p.next = p.next.next
return e def search(self, elem):
p = self._head
i = 0
while p is not None:
if p.elem == elem:
return i
i += 1
p = p.next
return -1 def forall(self, op):
p = self._head
while p is not None:
op(p.elem)
p = p.next
python数据结构与算法之单链表的更多相关文章
- 【数据结构与算法】单链表操作(C++)
#include <stdio.h> #include <malloc.h> /*单链表节点定义*/ typedef struct LNode { int data; //da ...
- C:数据结构与算法之单链表
单链表相对于顺序表比较难理解,但是比较实用,单链表的插入,删除不需要移动数据元素,只需要一个指针来寻找所需要的元素,还有一个大优点就是不浪费空间,当你想要增加一个结点可以申请(malloc())一个结 ...
- 2、java数据结构和算法:单链表: 反转,逆序打印, 合并二个有序链表,获取倒数第n个节点, 链表的有序插入
什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)
数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
- 数据结构之 线性表---单链表操作A (删除链表中的指定元素)
数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
随机推荐
- CCF CSP 201609-1 最大波动
题目链接:http://118.190.20.162/view.page?gpid=T47 问题描述 试题编号: 201609-1 试题名称: 最大波动 时间限制: 1.0s 内存限制: 256.0M ...
- 微信小程序数组对象
xml:<block wx:for="{{post_key}}" wx:for-item="{{item}}"></block> dat ...
- 通过Shell脚本将VSS项目批量创建并且提交迁移至Gitlab
脚本运行环境:Git Bash 系统环境:Windows 10 Pro 1709 VSS版本:Microsoft Visual SourceSafe 2005 我的VSS工作目录结构如下: D:\wo ...
- Winform 加载datagridview
string str = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Test;Integrated Security=True ...
- C# WMI通过网络连接名称获取IP掩码网关
/// <summary> /// 读取IP,掩码,网关地址 /// </summary> /// <param name="netConnectorName& ...
- xampp——apache服务启动问题(端口占用)
Apache启动提示 20:39:02 [Apache] Error: Apache shutdown unexpectedly.20:39:02 [Apache] This may be due t ...
- android源码编译出现No private recovery resources for TARGET_DEVICE解决方法
mmm或mm出现以下提示的解决方法:Terminal log:No private recovery resources for TARGET_DEVICE xxxxxxmake: Entering ...
- 0x14哈希之兔子兔子
参考链接:https://www.cnblogs.com/wyboooo/p/9813428.html 题目链接:https://www.acwing.com/problem/content/140/ ...
- javascript面向对象知识
<html> <head> <script></script> </head> <body> <!-- <scrip ...
- Java 诊断工具 Arthas 教程学习笔记
Java 诊断利器 Arthas,是阿里的一款开源工具.Github-alibaba/arthas 上可以看到它的介绍.了解它,主要是最近对分析 Java 错误堆栈比较感兴趣,机缘巧合看到了它. 本文 ...