python 单向链表实现
单链表的操作
- is_empty() 链表是否为空
- length() 链表长度
- travel() 遍历整个链表
- add(item) 链表头部添加元素
- append(item) 链表尾部添加元素
- insert(pos, item) 指定位置添加元素
- remove(item) 删除节点
- search(item) 查找节点是否存在
- class SingleNode(object):
- """单链表的结点"""
- def __init__(self,item):
- # _item存放数据元素
- self.item = item
- # _next是下一个节点的标识
- self.next = None
- class SingleLinkList(object):
- """单链表"""
- def __init__(self):
- self._head = None
- def is_empty(self):
- """判断链表是否为空"""
- return self._head == None
- def length(self):
- """链表长度"""
- # cur初始时指向头节点
- cur = self._head
- count = 0
- # 尾节点指向None,当未到达尾部时
- while cur != None:
- count += 1
- # 将cur后移一个节点
- cur = cur.next
- return count
- def travel(self):
- """遍历链表"""
- cur = self._head
- while cur != None:
- print (cur.item)
- cur = cur.next
- print ("")
- def add(self, item):
- """头部添加元素"""
- # 先创建一个保存item值的节点
- node = SingleNode(item)
- # 将新节点的链接域next指向头节点,即_head指向的位置
- node.next = self._head
- # 将链表的头_head指向新节点
- self._head = node
- def append(self, item):
- """尾部添加元素"""
- node = SingleNode(item)
- # 先判断链表是否为空,若是空链表,则将_head指向新节点
- if self.is_empty():
- self._head = node
- # 若不为空,则找到尾部,将尾节点的next指向新节点
- else:
- cur = self._head
- while cur.next != None:
- cur = cur.next
- cur.next = node
- def insert(self, pos, item):
- """指定位置添加元素"""
- # 若指定位置pos为第一个元素之前,则执行头部插入
- if pos <= 0:
- self.add(item)
- # 若指定位置超过链表尾部,则执行尾部插入
- elif pos > (self.length()-1):
- self.append(item)
- # 找到指定位置
- else:
- node = SingleNode(item)
- count = 0
- # pre用来指向指定位置pos的前一个位置pos-1,初始从头节点开始移动到指定位置
- pre = self._head
- while count < (pos-1):
- count += 1
- pre = pre.next
- # 先将新节点node的next指向插入位置的节点
- node.next = pre.next
- # 将插入位置的前一个节点的next指向新节点
- pre.next = node
- def remove(self,item):
- """删除节点"""
- cur = self._head
- pre = None
- while cur != None:
- # 找到了指定元素
- if cur.item == item:
- # 如果第一个就是删除的节点
- if not pre:
- # 将头指针指向头节点的后一个节点
- self._head = cur.next
- else:
- # 将删除位置前一个节点的next指向删除位置的后一个节点
- pre.next = cur.next
- break
- else:
- # 继续按链表后移节点
- pre = cur
- cur = cur.next
- def search(self,item):
- """链表查找节点是否存在,并返回True或者False"""
- cur = self._head
- while cur != None:
- if cur.item == item:
- return True
- cur = cur.next
- return False
- if __name__ == "__main__":
- ll = SingleLinkList()
- ll.add(1)
- ll.add(2)
- ll.append(3)
- ll.insert(2, 4)
- print ("length:",ll.length())
- ll.travel()
- print (ll.search(3))
- print (ll.search(5))
- ll.remove(1)
- print ("length:",ll.length())
- ll.travel()
python 单向链表实现的更多相关文章
- Python 单向链表、双向链表
用面向对象实现Linkedlist链表 单向链表实现append.iternodes 双向链表实现append.pop.insert.remove.iternodes 单向链表与双向链表 单向链表: ...
- Python单向链表的实现
链表由一系列不必在内存中相连的结构构成,这些对象按线性顺序排序.每个结构含有表元素和指向后继元素的指针.最后一个单元的指针指向NULL.为了方便链表的删除与插入操作,可以为链表添加一个表头. 删除操作 ...
- python 单向链表
import sys import random class employee: def __init__(self): self.num= self.salary= self.name='' sel ...
- python数据结构链表之单向链表
单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...
- Python链表的实现与使用(单向链表与双向链表)
参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...
- 用python实现单向链表
单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...
- 用Python写单向链表和双向链表
链表是一种数据结构,链表在循环遍历的时候效率不高,但是在插入和删除时优势比较大. 链表由一个个节点组成. 单向链表的节点分为两个部分:存储的对象和对下一个节点的引用.注意是指向下一个节点. 而双向链表 ...
- python数据结构——单向链表
链表 ( Linked List ) 定义:由许多相同数据类型的数据项按照特定顺序排列而成的线性表. 特点:各个数据在计算机中是随机存放且不连续. 优点:数据的增删改查都很方便,当有新的数据加入的时候 ...
- python中的单向链表实现
引子 数据结构指的是是数据的组织的方式.从单个数据到一维结构(线性表),二维结构(树),三维结构(图),都是组织数据的不同方式. 为什么需要链表? 顺序表的构建需要预先知道数据大小来申请连续的存储空间 ...
随机推荐
- Babel 安装教程
Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行. 这意味着,你可以现在就用 ES6 编写程序,而不用担心现有环境是否支持.下面是一个例子. // 转码前 inpu ...
- jsp学习笔记之:内置对象
application对象: 设置一个名为name,值为val的应用内共享的数据 <% application.setAttribute("name",val); %> ...
- 【NOIP2009】【CJOJ1687】【洛谷1074】靶形数独
题面 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出 ...
- 【CJOJ2484】【Luogu2805】最小函数值(函数最小值)
题面 Description 有n个函数,分别为F1,F2,...,Fn.定义 Fi(x)=Aix2+Bix+Ci(x∈N∗)Fi(x)=Aix2+Bix+Ci(x∈N∗) .给定这些Ai.Bi和Ci ...
- 【THUWC 2017】在美妙的数学王国中畅游
数学王国里有n座城市,每座城市有三个参数\(f\),\(a\),\(b\),一个智商为\(x\)的人经过一座城市的获益\(f(x)\)是 若\(f=1\),则\(f(x)=\sin(ax+b)\): ...
- Spring AOP梳理
一.Srping AOP AOP(Aspect Oriented Programming)解释为面向切面编程,何为切面,用刀把一块面包切成两半,刀切下去形成的面就叫切面,那么面向切面的就是形成切面的这 ...
- c# ffmpeg视频转换【转载】
c# ffmpeg视频转换 什么是ffmpeg,它有什么作用呢,怎么可以使用它呢,带着问题去找答案吧!先参考百度百科把,我觉得它很强大无奇不有,为了方便大家我就把链接提供了! http://baik ...
- 【python学习笔记】5.条件、循环和其他语句
[python学习笔记]5.条件.循环和其他语句 print: 用来打印表达式,不管是字符串还是其他类型,都输出以字符串输出:可以通过逗号分隔输出多个表达式 import: 导入模块 impo ...
- JS 装饰器解析
随着 ES6 和 TypeScript 中类的引入,在某些场景需要在不改变原有类和类属性的基础上扩展些功能,这也是装饰器出现的原因. 装饰器简介 作为一种可以动态增删功能模块的模式(比如 redux ...
- 消息队列的使用 RabbitMQ
RabbitMQ 是一款开源且比较流行的消息中间件.但用起来还是比较麻烦,有人封装了一层, 这就是 EasyNetQ . 一.安装 1.安装 Erlang: http://www.erlang.org ...