线性表和链表
Posted huhu1211
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表和链表相关的知识,希望对你有一定的参考价值。
线性表在python中有元组、列表、集合以及字典,非线性表目前介绍链表。
1.线性表对比
名称 | 存储类型 | 是否可变 | 是否有序 | 存储是否可重复 |
列表 | 1.使用中括号括起来;如 list=[1,2,3,4] 2.可以存储任何类型; 3.可以存储不同类型的数据(不建议); | 可以增、删、改、查; | 是 | 是 |
元组 | 1.使用小括号括起来;如 tuple = (1,2,3,4) 2.可以存储任何类型; 3.可以存储不同类型的数据(不建议) | 可以查; | 是 | 是 |
集合 | 1.使用小括号括起来,参数一般是一个list;如 set = set([1,2,3,4]) 2.一般传入的是一个列表; | 可以增、删、改、查; | 无 | 否 |
字典 |
1.使用大括号括起来,键值对的方式;如 dict ={"a":1,"b":2} 2.只能使用不可变类型作为键,值得类型任意; |
可以增、删、改、查; |
无 |
否 |
2.链表
通俗来讲,链表链表就是像一条链子一样把数据穿起来形成一张表。链表存储方式是不连续存储,上一个数据通过地址来寻找下一个数据的存储位置。所以链表的每一个存储但是是数据+下一个数据存储的地址,称为节点;如图
3.链表和列表的区别
列表 | 链表 | |
读取 | O(1) | O(n) |
插入 | O(n) | O(1) |
删除 | O(1) | O(n) |
4.链表的操作
仿照列表,链表会有增、删、改、查,其中增又有头插、尾查、任意位置插入。查又有遍历和给定条件查询。
代码:
"""节点的声明,节点是链表的基本组成部分"""
class Node(object):
def __init__(self, item):
self.item = item # 存储数据的部分
self.next = None # 存储地址的部分
"""单链表的操作"""
class SigleLink(object):
def __init__(self):
self.__head = None # 链表给定一个头节点
def add(self, item):
"""在开头插入数据"""
node = Node(item)
node.next = self.__head
self.__head = node
def is_empty(self):
"""判断是否为空"""
return self.__head is None
def length(self):
"""计算长度"""
count = 0
cur = self.__head
while cur != None:
count += 1
cur = cur.next
return count
def append(self, item):
"""尾插法"""
node = Node(item)
if self.is_empty():
self.__head = node
else:
cur = self.__head
while cur.next!=None:
cur = cur.next
print self.__head
cur.next = node
def insert(self, pos, item):
"""指定的位置插入"""
if pos <=0:
self.add(item)
elif pos > self.length()-1:
self.append(item)
else:
node = Node(item)
pre = self.__head
count = 0
while count < pos-1:
count+=1
pre = pre.next
node.next = pre.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:
pre.next = cur.next
break
else:
pre = cur
cur = cur.next
def travel(self):
"""遍历"""
cur = self.__head
while cur!=None:
print cur.item,
cur = cur.next
def search(self, item):
"""查找"""
cur = self.__head
while cur!=None:
if cur.item ==item:
return True
else:
cur = cur.next
return False
以上是关于线性表和链表的主要内容,如果未能解决你的问题,请参考以下文章