码迷,mamicode.com
首页 > 其他好文 > 详细

线性表和链表

时间:2018-09-11 22:33:26      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:图片   return   none   存储类型   元素   ret   区别   travel   length   

线性表在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

  

 

线性表和链表

标签:图片   return   none   存储类型   元素   ret   区别   travel   length   

原文地址:https://www.cnblogs.com/huhu1211/p/9630691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!