线性表

本文详细介绍了线性表的逻辑结构及其两种主要存储结构——顺序表和链表,包括单链表、双链表、循环链表和静态链表。探讨了顺序表的随机访问特性和链表的插入、删除操作。此外,还列举了线性表相关的面试题,如链表倒数第k个节点、反转链表、两链表合并、删除链表节点等,并给出了解题思路。
摘要由CSDN通过智能技术生成

线性表是一种逻辑结构,包括顺序表(顺序表)、链表(单链表、双链表、循环链表、静态链表)两种存储结构

定义:具有相同数据类型的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&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值