python之数据结构链表实现方式

 1 #!/usr/bin/env python
 2 # ---------------------------------------
 3 # author : Geng Jie
 4 # email  : [email protected]
 5 #
 6 # Create Time: 2016/3/16 22:05
 7 # ----------------------------------------
 8
 9
10 class Node():
11     def __init__(self, data):
12         self.data = data
13         self.next = None
14
15
16 class LinkedList:
17     def __init__(self):
18         self.head = None
19         self.tail = None
20
21     def append(self, data):
22         node = Node(data)
23         if self.head is None:
24             self.head = node
25             self.tail = node
26
27         else:
28             self.tail.next = node
29             self.tail = node
30
31     def is_zero(self):
32         if self.head is None:
33             return True
34         return False
35
36     def len(self):
37         if self.head is None:
38             return ‘Empty‘
39         else:
40             count = 0
41             while self.head:
42                 self.head = self.head.next
43                 count += 1
44             return count
45
46     def iter(self):
47         if not self.head:
48             return
49
50         cur = self.head
51         yield cur.data
52         while cur.next:
53             cur = cur.next
54             yield cur.data
55
56     def insert(self, idx, value):
57         cur = self.head
58         cur_idx = 0
59         while cur_idx < idx - 1:
60             cur = cur.next
61             if cur is None:
62                 raise Exception(‘List length less than index‘)
63             cur_idx += 1
64         node = Node(value)
65         node.next = cur.next
66         cur.next = node
67         if node.next is None:
68             self.tail = node
69
70     def remove(self, idx):
71         cur = self.head
72         cur_idx = 0
73         while cur_idx < idx - 1:
74             cur = cur.next
75             if cur is None:
76                 raise Exception(‘List length less than index‘)
77             cur_idx += 1
78         cur.next = cur.next.next
79         if cur.next is None:
80             self.tail = cur
81
82
83 if __name__ == ‘__main__‘:
84     linked_list = LinkedList()
85     for i in range(10):
86         linked_list.append(i)
87
88     print(linked_list.len())
89
90     # print(linked_list.is_zero())
91     # linked_list.insert(3, 30)
92     # linked_list.remove(4)
93     # for node in linked_list.iter():
94     #     print(node)
时间: 2024-08-07 04:23:24

python之数据结构链表实现方式的相关文章

python实现数据结构单链表

#python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" def __init__(self, elem): self.elem = elem self.next = None # 节点一开始初始化的时候并不知道下一个元素的地址,所以先设置为空 class SingLinkList(object): """单链表""

python数据结构链表之单向链表

本文和大家分享的主要是python中单向链表相关内容,一起来看看吧,希望对大家学习python有所帮助. 单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. . 表元素域elem用来存放具体的数据. . 链接域next用来存放下一个节点的位置(python中的标识) . 变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点. 节点实现 class 

Linux内核数据结构——链表

目录 目录 简介 单向链表 双向链表 环形链表 Linux内核中的链表实现 offsetof container_of container_of 第一部分 container_of 第二部分 链表初始化 向链表中增加一个节点 删除节点 移动节点 判断链表是否为空 遍历链表 Demo测试 mlisth mlistc 执行结果 简介 最近在学习Android Binder驱动程序实现的时候,发现里面的数据结构用到了struct list_head.而我google发现struct list_head

python常见数据结构整理

Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) 序列中的每个元素都有自己的编号.Python中有6种内建的序列.其中列表和元组是最常见的类型.其他包括字符串.Unicode字符串.buffer对象和xrange对象.下面重点介绍下列表.元组和字符串. 1.列表 列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能. (1).创

基础数据结构 链表、栈、队列

数据结构是程序设计中一个非常重要的部分,基本的数据结构包括链表.栈和队列,当然高级一点的还有树.图等,实际上链表.栈和队列都是线性表,只是在操作和表示方式上有所不同,线性表用顺序结构表示就是顺序表,用链结构表示就是链表,如果对线性表的操作加以限制,只能有在表尾进行插入和删除元素,这就变成栈了,如果只能允许元素从表尾插入,表头删除,这就变成队列了. 链表 /* * 数据结构 链表 * 链式结构 */ #include <iostream> using namespace std; enum St

python基本数据结构序列

python基本数据结构序列 ,六种内建序列类型:列表 元组字符串  Unicode字符串  buff对象和xrange对象 序列通用操作: 索引:元素的编号是从 0开始的 到索引号为负数时 查找方式是从右到左的 索引写在[]中 分片:类似索引的操作可以指定范围,当为一个对象创造副本时可以用 b = a[:] 这样的形式创建,这样 当 a被操作时不会影响 b  因为他们指向的不是同一块区域 相加:表示连接操作,列表连接后是新的列表不能改变列表原有的结构,序列相加时候要同种类型  进行,否则会报

python中的链表

python中的链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接.链表的数据结构如下图所示 在链表中删除操作可以通过修改指针来实现,如下图所示: 插入则是调整,插入点的前后两个指针的指向关系,如下图所示: 在python中每个变量都是指针,例如: 用内置数据结构(list, dict, tuple等)的嵌套/组合,它们隐式地包含了指向/嵌套关系,如graph[u][v]={w0,w1..}类的成员变量.嵌套类可能包含了指向/

用Python实现数据结构之二叉搜索树

二叉搜索树 二叉搜索树是一种特殊的二叉树,它的特点是: 对于任意一个节点p,存储在p的左子树的中的所有节点中的值都小于p中的值 对于任意一个节点p,存储在p的右子树的中的所有节点中的值都大于p中的值 一个图例: 基于二叉搜索树的这种关系,我们可以用它来实现有序映射 遍历二叉搜索树 基于二叉搜索树的特性,采用中序遍历的方式可以使得遍历结果是按照从小到大的顺序排列的.了解中序遍历可以参考用Python实现数据结构之树 这里还需要思考的一个内容是在基于中序遍历的前提下,如何求一个节点的后继节点或前驱节

队列(二)——队列的链表实现方式

1.队列的单向链表的实现方法 return只可以返回一个值,单向循环链表来实现队列的时候可以只保留一个指针,因为保留rear指针能够很方便的表示出front指针,所以保留rear指针. 另外由于链表的第一个结点处理比较特殊,所以在初始化的时候需要单独处理.链表实现的队列思想也是第一个单元作为头结点,不存放数据,rear指针指向的总是尾结点(在循环链表中也就是头结点的上一个结点). 2.实现方法 用带表头的单向循环链表来实现 #include <stdio.h> #include <mal