python 链表的实现
code
#!/usr/bin/python
# -*- coding: utf- -*-
class Node(object):
def __init__(self,val,p=):
self.data = val
self.next = p
self.prev = p class LinkList(object):
def __init__(self):
self.head =
def __getitem__(self, key):
if self.is_empty():
print 'linklist is empty.'
return elif key < or key > self.getlength():
print 'the given key is error'
return else:
return self.getitem(key) def __setitem__(self, key, value):
if self.is_empty():
print 'linklist is empty.'
return elif key < or key > self.getlength():
print 'the given key is error'
return else:
self.delete(key)
return self.insert(key) def initlist(self,data):
self.head = Node(data[]) p = self.head for i in data[:]:
node = Node(i)
p.next = node
node.prev = p
p = p.next def getlength(self):
p = self.head
length =
while p!=:
length+=
p = p.next return length def is_empty(self):
if self.getlength() ==:
return True
else:
return False def clear(self):
self.head = def append(self,item):
q = Node(item)
if self.head ==:
self.head = q
else:
p = self.head
while p.next!=:
p = p.next
p.next = q
q.prev = p def getitem(self,index):
if self.is_empty():
print 'Linklist is empty.'
return
j =
p = self.head while p.next!= and j <index:
p = p.next
j+= if j ==index:
return p.data else: print 'target is not exist!' def insert(self,index,item):
if self.is_empty() or index< or index >self.getlength():
print 'Linklist is empty.'
return if index ==:
q = Node(item,self.head) self.head = q p = self.head
post = self.head
j =
while p.next!= and j<index:
post = p
p = p.next
j+= if index ==j:
q = Node(item,p)
post.next = q
q.prev = post
q.next = p
p.prev = q def delete(self,index):
if self.is_empty() or index< or index >self.getlength():
print 'Linklist is empty.'
return if index ==:
q = Node(item,self.head) self.head = q p = self.head
post = self.head
j =
while p.next!= and j<index:
post = p
p = p.next
j+= if index ==j:
post.next = p.next
p.next.prev = post def index(self,value):
if self.is_empty():
print 'Linklist is empty.'
return p = self.head
i =
while p.next!= and not p.data ==value:
p = p.next
i+= if p.data == value:
return i
else:
return - l = LinkList()
l.initlist([,,,,])
print l.getitem()
l.append()
print l.getitem() l.insert(,)
print l.getitem()
print l.getitem()
print l.getitem() l.delete()
print l.getitem() print(l.index())
输出
https://www.jb51.net/article/43559.htm
python 链表的实现的更多相关文章
- Python链表的实现与使用(单向链表与双向链表)
参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...
- Python链表操作(实现)
Python链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对链表本身的数据结构特 ...
- python 链表表达式 map、filter易读版
链表推导式 [x for x in x] 链表推导式提供了一个创建链表的简单途径,无需使用 map(), filter() 以及 lambda.返回链表的定义通常要比创建这些链表更清晰.每一个链表推导 ...
- Python链表与反链表
# -*- coding:utf8 -*- #/usr/bin/env python class Node(object): def __init__(self, data, pnext = None ...
- python链表的实现
根据Problem Solving with Algorithms and Data Structures using Python 一书用python实现链表 书籍在线网址http://intera ...
- python 链表
在C/C++中,通常采用“指针+结构体”来实现链表:而在Python中,则可以采用“引用+类”来实现链表. 节点类: class Node: def __init__(self, data): sel ...
- python链表的实现,有注释
class Node(): #node实现,每个node分为两部分:一部分含有链表元素,成数据域;另一部分为指针,指向下一个 __slots__=['_item' ...
- python 链表的反转
code #!/usr/bin/python # -*- coding: utf- -*- class ListNode: def __init__(self,x): self.val=x self. ...
- python 链表、堆、栈
简介 很多开发在开发中并没有过多的关注数据结构,当然我也是,因此,我写这篇文章就是想要带大家了解一下这些分别是什么东西. 链表 概念:数据随机存储,并且通过指针表示数据之间的逻辑关系的存储结构. 链表 ...
- Add Two Numbers(from leetcode python 链表)
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
随机推荐
- idea: unable to import maven project
新搭建的maven环境,使用idea创建maven项目时,一直提示 unable to import maven project,百度良久未解决 有说关闭防火前的,亲测无效,后看到说是maven-3. ...
- OO第4次博客作业
OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...
- 用less查看日志文件
一般程序部署在Linux环境,查看日志时,一般用less满足大部分的需求. 列举.记录最常用的场景,代码以Tomcat日志文件catalna.out为例. 1. > 直接查看文件 less ca ...
- atan、atanf、atanl、atan2、atan2f、atan2l
很久不发博客了,今天在园中计算各种角,于是复习下fan正切函数 计算x的反正切值 (atan.atanf和 atanl) 或y/x 的反正切值 (atan2.atan2f和 atan2l). ...
- Android 低功耗蓝牙BLE 开发注意事项
基本概念和问题 1.蓝牙设计范式? 当手机通过扫描低功耗蓝牙设备并连接上后,手机与蓝牙设备构成了客户端-服务端架构.手机通过连接蓝牙设备,可以读取蓝牙设备上的信息.手机就是客户端,蓝牙设备是服务端. ...
- unity获取ugui上鼠标位置
public class GetMousePos : MonoBehaviour { public Canvas canvas;//画布 private RectTransform rectTrans ...
- Maven版本管理
一.Maven项目打包的两种方式 二.如何优雅地修改多模块maven项目中的版本号 三.一个项目使用另一个项目 一.Maven项目打包的两种方式: 1.依赖工具比如eclipse 2.使用命令行: ...
- 【JUC】6.线程池—ThreadPoolExecutor
创建线程池可以分为三种方式: 1. 通过ThreadPoolExecutor的构造方法,创建ThreadPoolExecutor的对象,即一个线程池对象: 此构造方法,一共7个参数,5个必须参数,2个 ...
- Linux磁盘管理——BIOS和UEFI
参考:BIOS and UEFI - CompTIA A+ 220-901 - 1.1 BIOS and UEFI As Fast As Possible 严格上来说BIOS和UEFI除了在搜索boo ...
- js中绑定事件处理函数,使用event以及传递额外数据
IE8中使用attachEvent绑定事件处理函数时,不能直接向event 对象添加数据属性.可以用属性复制的方法,包装新的event对象. 1. 属性复制var ObjectExtend = fun ...