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个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
随机推荐
- C#通过Ado.net对连接数据库并进行添加删除等常规操作的代码
如下资料是关于C#通过Ado.net对连接数据库并进行添加删除等常规操作的内容. static string sqlcon = "server=.;database=;Integrated ...
- C# Thread.Jion()
什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的 ...
- docker和kubernetes中hostname的使用和常见问题
hostname在docker中是使用UTS namespace进行隔离的.docker中主要有两种ns的用法, 一种是docker run --uts="" busybox.这种 ...
- SPOJ 375 QTREE - Query on a tree
思路 注意本题只能用C,不能用C++ 其他的都和上一题一样 代码 #include <stdio.h> #include <string.h> #define MAXN 100 ...
- linux设置静态IP及网卡选择
linux中使用ifconfig命令查看网卡信息时显示为eth1,但是在network-scripts中只有ifcfg-eth0的配置文件,并且里面的NAME="eth0". ...
- xml转json和实体类的两种方式
本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...
- ng/cli uses yarn as the package manager
Switch to working directory Excuting the following command ng config cli.packageManager yarn
- 日常安装chocolatey报错此系统上禁止运行脚本
查看计算机上的现用执行策略get-executionpolicy ( 默认:Restricted ) 若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本,使用以下命令将计算机上的 执行 ...
- java笔记 -- 数组
概念: 数组是一种数据结构, 用来存储同一类型值的集合. 通过一个整型的下标可以访问数组中的每一个值. 声明: int[] a(推荐,将类型int[](整形数组)和变量名分开了) 或者int a[] ...
- 第 10 章 容器监控 - 081 - Weave Scope 多主机监控
除了监控容器,Weave Scope 还可以监控 Docker Host 点击顶部 HOSTS 菜单项,地图将显示当前 host. 与容器类似,点击该 host 图标将显示详细信息 host 当前的资 ...