线性表是一种逻辑结构,包括顺序表(顺序表)、链表(单链表、双链表、循环链表、静态链表)两种存储结构
定义:具有相同数据类型的n个数据元素的有限列表,处了第一个元素,每个元素有且仅有一个前驱,除了最后一个元素,每个元素有且仅有一个后继。
顺序表:表中逻辑顺序与物理顺序相同,随机访问,可以在0(1)找到指定元素,但是插入忽然删除需要移动大量元素。
顺序表:
class sqlist(object):
def __init__(self,length):
self.length=length
self.data=[]*self.length
self.num=0
def empty(self):
return self.num is 0
def full(self):
return self.num is self.length
继承了object对象,拥有了好多可操作对象,这些都是类中的高级特性,不继承object的话只有很少的可操作对象,实际上在python 3 中已经默认就帮你加载了object了(即便你没有写上object)。
python中__init__()函数即表示构造函数,通常在Python中创建类中见到。_init__
方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__
方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。
单链表:线性表的链式存储结构
class Node(object):
//定义类描述指针
def __init__(self,val,p=0):
self.data=val
self.next=p
class linklist(object):
//定义类描述单链表
def __init__(self):
self.head=None
def initlinklist(self,data):
//初始化单链表
self.head=Node(data[0])
p=self.head
for i in data[1:]:
p.next=Node(i)
p=p.next
def print(self):
p=self.head
while not p:
print(p.data)
p=p.next
单链表的头插法是逆序。
只有指向后继的指针,访问前驱结点指针是0(1),访问后继是0(1)。所以删除一个结点p,的时候,如果从头开始查找,0(n),但是把p复制给后继,删除后继0(1)。
循环单链表:把单链表最后一个指针不是NULL,改了指向头结点,形成一个环。任何位置操作一样,无需判断表头表尾。在对表头表尾操作的时候,可以只设尾结点r,这样头结点r.next ,在头结点和尾结点都是0(1)。
双链表:在单链表的节点中加入了前驱指针。插入删除0&#