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个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
随机推荐
- Microsoft SQL Server 【Windows 身份验证】和 【sa】都无法登录的解决方案
1.修改启动参数:打开[SQL Server 配置管理器(SQL Server Configuration Manager)]→右键[SQL Server(MSSQLSERVER)]属性→高级(Adv ...
- restful 跨域
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能. 就浏览器而言的, http://127.0.0.1:8000 协议 域名 端口 跨域 问题// 简单 ...
- Java SE中的Synchronized
1 引言 在多线程并发的编程中Synchronized一直是元老级的角色,很多人会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化以后,有些情况下它并不那么重了. ...
- 20180519001 - DataTable Group by功能参考
DataSet6 = DataSet1.Copy(); DataRow[] dr = DataSet6.Tables[0].Select(" 完工状态 = '完工异常' "); D ...
- MTK(android init.rc) 写一个开机启动的服务
在开机往往我们想要做一些初始化的操作,这时候可以使用init.rc文件来实现,当然书写一个开机启动的服务也需要规范的. 假设是C程序,则需要准备C程序的源码,在我的例程中是一个在开机完成(androi ...
- Java第一次实训课的作业
1.圆的面积 2.加密数字 3.奇偶数
- 【Alpha】Scrum Meeting 9
目录 前言 任务分配 燃尽图 会议照片 签入记录 困难 前言 第9次会议于4月13日20:00在一公寓3楼召开. 交流确认了任务进度,对下一阶段任务进行分配.时长20min. 任务分配 姓名 当前阶段 ...
- 【BZOJ5194】Snow Boots
[原题题面]传送门 [简化题意] 给定一个长度为n的序列. 有m次询问,每次询问给定两个数si,di.你一开始站在0,每次你可以走不超过di,但你到达的位置的数不能超过si.问能否走到n+1. n,m ...
- 移动web开发中input等输入框问题
移动端web开发时,input等输入框在安卓和iso中都有问题,分别有:1.iso不能点击其他区域使得输入框失去焦点2.iso输入框失去焦点后,键盘产生的空白部分不消失3.安卓端输入框得到焦点后,输入 ...
- vscode下运行matlab记录
Linux下安装MATLAB可参照以下链接: https://blog.csdn.net/qq_31285709/article/details/82083902 在vscode 中运行.m文件. 首 ...