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 -& ...
随机推荐
- 微信小程序自定义组件,提示组件
微信小程序自定义组件,这里列举了一个常用的提示自定义组件,调用自定义组件中的方法和字段.仅供参考和学习. 编写组件: 在根目录下添加“components”目录,然后像添加Page页面一样添加自定义组 ...
- “SQL Server does not exist or access denied.”
Have resolved the problem, the Port was different and so the Connection String now reads: <connec ...
- iOS 作为蓝牙外设广播信息
苹果蓝牙后台的限制,原本广播会有两个段分别是localName和serviceUUID这两块,但现在后台广播时,是不发送在这两段的 手机app可以作为一个蓝牙外设端来模拟外设硬件,但广播包里的数据只能 ...
- uc/xi
一个较为通用的定义为:嵌入式系统是对对象进行自动控制而使其具有智能化并可嵌入对象体系统中的专用计算机系统. 实时性:目前,嵌入式系统广泛应用于生产过程控制.数据采集.传输通信等场合,这些应用的共同特点 ...
- 【转】高性能网络编程1----accept建立连接
最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它. 编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比 ...
- xtarbackup 简单恢复
xtrbackup Xtrabackup安装 #下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/ep ...
- Exchange 退信550 5.1.11 RESOLVER.ADR.ExRecipNotFound
问题描述: 在Exchange 2013环境下,某客户将一个用户的邮箱test@abc.com禁用,过了几天又想连接该邮箱,但是却没有找到禁用的邮箱,然后客户就Enable-MailBox重新创建了一 ...
- java 懒汉式、饿汉式单例模式 不含多线程的情况
//饿汉式 提前生成了单例对象 class Singleton{ private static final Singleton instance=new Singleton(); private Si ...
- Win10任务栏卡死解决方法
有时,切换输入法,或者点击windows底部菜单,电脑鼠标会变成忙碌转圈圈的状态,无法操作底部菜单功能: 1. ctrl+shift+esc(或者ctrl+alt+delete)的方式调出任务管理器: ...
- *.Net框架 - IGrouping类 & Lookup类
Dictionary<TKey, TValue>只为每个键支持一个值.新类Lookup<TKey, TElement>是.NET 3.5中新增的,它类似于Dictionary& ...