线性表和链表

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
print


def search(self, item):
"""查找"""
cur = self.__head
while cur!=None:
if cur.item ==item:
return True
else:
cur = cur.next
return False

  

 































































































以上是关于线性表和链表的主要内容,如果未能解决你的问题,请参考以下文章

C中线性表和链表的区别

线性表和链表

线性表和链表

线性表和链表

线性表顺序表和链表,你还分不清?

线性表和链表