链表简介与数据结构

  单向链表也叫单链表,是表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。  

单向链表的抽象数据类型定义:

      . 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的更多相关文章

  1. 数据结构和算法(Golang实现)(12)常见数据结构-链表

    链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点 ...

  2. Python—数据结构——链表

    数据结构——链表 一.简介 链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构.由一系列节点组成的元素集合.每个节点包含两部分,数据域item和指向下一个节 ...

  3. (js描述的)数据结构[链表](4)

    (js描述的)数据结构 [链表](4) 一.基本结构 二.想比于数组,链表的一些优点 1.内存空间不是必须连续的,可以充分利用计算机的内存,事项灵活的内存动态管理. 2.链表不必再创建时就确定大小,并 ...

  4. Redis数据结构—链表与字典的结构

    目录 Redis数据结构-链表与字典的结构 链表 Redis链表节点的结构 Redis链表的表示 Redis链表用在哪 字典 Redis字典结构总览 Redis字典结构分解 Redis字典的使用 Re ...

  5. Redis数据结构—链表与字典

    目录 Redis数据结构-链表与字典 链表 Redis链表节点的结构 Redis链表的表示 Redis链表用在哪 字典 Redis字典结构总览 Redis字典结构分解 哈希算法 解决键冲突 rehas ...

  6. delphi.数据结构.链表

    链表作为一种基础的数据结构,用途甚广,估计大家都用过.链表有几种,常用的是:单链表及双链表,还有N链表,本文着重单/双链表,至于N链表...不经常用,没法说出一二三来. 在D里面,可能会用Contnr ...

  7. Python 数据结构 链表

    什么是时间复杂度 时间频度:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才知道.但是我们不可能也没有必要对每一个算法都进行上机测试,只需要知道那个算法花费的时间多,那个算法花费得 ...

  8. java数据结构----链表

    1.链表:链表是继数组之后第二种使用的最广泛的通用存储结构,它克服了数组的许多弊端:无序数组的查找慢问题,有序数组的插入慢问题,数组定义时的定长问题.它也可取代数组,作为其他数据结构的基础. 2.引用 ...

  9. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

随机推荐

  1. python25之进制转换

    一.进制转换函数 bin():将十进制转换为二进制 oct():将十进制转换为八进制 hex():将十进制转换为十六进制 >>> x=1234>>> bin(x)' ...

  2. weblogic补丁升级详细步骤,18.7.17补丁更新

    weblogic打补丁 到weblogic官网下载补丁包 对应的补丁包  如: p22248372_1036012_Generic.zip 一  安装补丁步骤 1.登录linux的weblogic用户 ...

  3. Docker help详细帮助

    常用的 docker 命令 docker # docker 命令帮助 Commands: attach Attach to a running container # 当前 shell 下 attac ...

  4. AbstractQueuedSynchronizer与ReentrantLock

    介绍 j.u.c包中的Lock定义了锁的行为. 而ReentrantLock是并发包下提供的一个锁的实现,它是一个可重入的.排他的锁. ReentrantLock有的属性也很简单,除了一个serial ...

  5. QTP VBScript RegExp对象的运用

    下面来讲讲RegExp对象: Vbs提供了针对正则表达式的一个非常实用的类,就是RegExp Global属性:代表全局匹配 IgnoreCase属性:大小写忽略 Pattern属性:正则表达式 Ex ...

  6. windows下安装Pycham2020软件

    1.在pycham官网下载安装软件https://www.jetbrains.com/pycharm/download/#section=windows 2.我下载的是64位的安装包,现在开始安装 3 ...

  7. XML--XML从入门到精通 Part 1 认识XML

    XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义.您需要 ...

  8. Jenkins 部署(基于 windows)

    一.安装 jdk,配置环境变量 二.安装 tomcat 和 jenkins 1.检查电脑上 8080 端口是否被占用: 命令行中输入:netstat -ano 2.下载Tomcat Tomcat官方网 ...

  9. Spring 注解注入—@Qualifier 注释

    当创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean ...

  10. Shell脚本(三)重定向

    先上一张图: 代码如下: #!/bin/bash echo "hello world" echo `ls +` 运行结果如下: PS: 1. 如果想同时将数据重定向到文件和stdo ...