数据结构----链表Link
链表简介与数据结构
单向链表也叫单链表,是表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
单向链表的抽象数据类型定义: . is_empty():链表是否为空 . length():链表长度 . travel():遍历整个链表 . add(item):链表头部添加元素 . append(item):链表尾部添加元素 . insert(pos, item):指定位置添加元素 . remove(item):删除节点 . search(item):查找节点是否存在
链表的定义
class Node(object):
def __init__(self, item):
self.item = item
self.next = None class Link(object):
def __init__(self):
self._head = None def isEmpty(self):
return self._head is None @property
def length(self):
node = self._head
count = 0
while node:
count += 1
node = node.next
return count def travel(self):
if self._head:
cur_node = self._head
while cur_node:
print(cur_node.item)
cur_node = cur_node.next
else:
raise ("<The object is empty!>") def add(self, item):
node = Node(item)
node.next = self._head
self._head = node def append(self, item):
node = Node(item)
if self.isEmpty():
self._head = node
else:
cur_node = self._head
while cur_node:
pre_node, cur_node = cur_node, cur_node.next
pre_node.next = node def insert(self, item, index):
if index <= 0: # 插入位置索引小于等于0都是在头部插入
self.add(item)
elif index >= self.length: # 插入位置索引大于等于链表长度时都是在尾部插入
self.append(item)
else: # 插入位置索引index在1到链表length-1之间
node = Node(item)
cur_node = self._head.next
pre = self._head
count = 1
while cur_node:
if count == index:
pre.next, node.next = node, cur_node
break
pre, cur_node = cur_node, cur_node.next
count += 1 def remove(self, item):
if self.isEmpty(): # 空提示
return "Failed because of Empty!"
cur_node = self._head
pre_node = None
while cur_node:
if cur_node.item == item:
if pre_node == None: # 删除的索引为0
self._head = cur_node.next
else:
pre_node.next = cur_node.next
return item
pre_node, cur_node = cur_node, cur_node.next
raise ("Not found!") # 最后没有找到报错 def search(self, item):
if self.isEmpty():
raise ("<The object is empty!>")
else:
cur_node = self._head
index = 0
while cur_node:
if cur_node.item == item:
return index
index += 1
cur_node = cur_node.next
return -1
链表的使用
link = Link()
link.append(2)
link.append(3)
link.add(4)
link.insert(11, 1)
link.remove(4)
link.travel()
print(link.length)
print(link.search(11))
数据结构----链表Link的更多相关文章
- 数据结构和算法(Golang实现)(12)常见数据结构-链表
链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点 ...
- Python—数据结构——链表
数据结构——链表 一.简介 链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构.由一系列节点组成的元素集合.每个节点包含两部分,数据域item和指向下一个节 ...
- (js描述的)数据结构[链表](4)
(js描述的)数据结构 [链表](4) 一.基本结构 二.想比于数组,链表的一些优点 1.内存空间不是必须连续的,可以充分利用计算机的内存,事项灵活的内存动态管理. 2.链表不必再创建时就确定大小,并 ...
- Redis数据结构—链表与字典的结构
目录 Redis数据结构-链表与字典的结构 链表 Redis链表节点的结构 Redis链表的表示 Redis链表用在哪 字典 Redis字典结构总览 Redis字典结构分解 Redis字典的使用 Re ...
- Redis数据结构—链表与字典
目录 Redis数据结构-链表与字典 链表 Redis链表节点的结构 Redis链表的表示 Redis链表用在哪 字典 Redis字典结构总览 Redis字典结构分解 哈希算法 解决键冲突 rehas ...
- delphi.数据结构.链表
链表作为一种基础的数据结构,用途甚广,估计大家都用过.链表有几种,常用的是:单链表及双链表,还有N链表,本文着重单/双链表,至于N链表...不经常用,没法说出一二三来. 在D里面,可能会用Contnr ...
- Python 数据结构 链表
什么是时间复杂度 时间频度:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才知道.但是我们不可能也没有必要对每一个算法都进行上机测试,只需要知道那个算法花费的时间多,那个算法花费得 ...
- java数据结构----链表
1.链表:链表是继数组之后第二种使用的最广泛的通用存储结构,它克服了数组的许多弊端:无序数组的查找慢问题,有序数组的插入慢问题,数组定义时的定长问题.它也可取代数组,作为其他数据结构的基础. 2.引用 ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
随机推荐
- android位运算简单讲解
一.前言 在查看源码中,经常会看到很多这样的符号“&”.“|”.“-”,咋一看挺高大上:仔细一看,有点懵:再看看,其实就是大学学过的再普通不过的与.或.非.今天小盆友就以简单的形式分享下,同时 ...
- 深入理解PHP之数组(遍历顺序)
作者: Laruence 本文地址: http://www.laruence.com/2009/08/23/1065.html 转载请注明出处 经常会有人问我, PHP的数组, 如果用foreach来 ...
- 如何调试 Inno Setup
从命令行运行安装包,并加上 /log=filename
- Google Play商店为预注册的游戏和应用提供自动安装功能
谷歌 Play 商店一直在准备一项功能,它可以自动安装用户预先注册的应用程序和游戏.似乎该功能现已开始向第一批用户推出.有些人在预注册时会看到一个新选项,使他们能够利用发布时自动安装的功能. 用户在 ...
- 【Linux常见命令】wc命令
wc - print newline, word, and byte counts for each file wc命令用于计算字数. 利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指 ...
- 数学--数论--欧拉降幂--P5091 欧拉定理
题目背景 出题人也想写有趣的题面,可惜并没有能力. 题目描述 给你三个正整数,a,m,ba,m,ba,m,b,你需要求:ab mod ma^b \bmod mabmodm 输入格式 一行三个整数,a, ...
- HDU-1857 畅通工程再续
畅通工程再续 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定 ...
- RF(For 循环)
一.介绍:RobotFrameWork 支持 FOR 循环语句,语法和 Python 的语法基本相同,但 RobotFrameWork 中,"FOR" 关键字前面需要增加一个 &q ...
- F - Qualification Rounds CodeForces - 868C 二进制
F - Qualification Rounds CodeForces - 868C 这个题目不会,上网查了一下,发现一个结论就是如果是可以的,那么两个肯定可以满足. 然后就用二进制来压一下这个状态就 ...
- Pycharm修改HTML模板