欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构与算法(Python)Day3(上)(链表、单链表的构造、a,b=b,a)

程序员文章站 2022-05-26 16:19:57
...

链表

在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。
对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数据之间的某种关系。
这样的一组序列元素的组织形式,我们可以将其抽象为线性表。一个线性表是某类元素的一个集合,还记录着元素之间的一种顺序关系。线性表是最基本的数据结构之一,在实际程序中应用非常广泛,它还经常被用作更复杂的数据结构的实现基础。
根据线性表的实际存储方式,分为两种实现模型:
顺序表,将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示。
链表,将元素存放在通过链接构造起来的一系列存储块中。
数据结构与算法(Python)Day3(上)(链表、单链表的构造、a,b=b,a)

单向链表

单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值
数据结构与算法(Python)Day3(上)(链表、单链表的构造、a,b=b,a)
数据结构与算法(Python)Day3(上)(链表、单链表的构造、a,b=b,a)

单链表的构造

#单链表的构造
#coding:utf-8
class Node(object):
    '''节点'''
    def __init__(self,elem):
        self.elem = elem
        self.next = None   #初始化为空,指向None


class SingleLinkList(object):
    '''单链表'''
    def __init__(self,node=None):  #初始化为空,node=None
        self._head=node

    def is_empty(self):
        '''链表是否为空'''
        return self._head==None
    def length(self):
        '''链表长度'''
        # cur:游标或指针,用来移动遍历节点
        cur = self._head
        # count记录数量
        count = 0#一定要设置为0,满足空链表特殊情况
        while cur != None:
            count += 1
            cur = cur.next
        return count
    def travel(self):
        '''遍历整个列表'''
        cur=self._head
        while cur!=None:
            print(cur.elem)
            cur=cur.next

    def add(self,item):
        '''链表头部添加元素'''
        pass
    def append(self,item):
        '''链表尾部添加元素'''
        node=Node(item)
        if self.is_empty():
            self._head=node  #空列表没有XXX.next,会报错
        else:
            cur = self._head
            while cur.next != None:
                cur = cur.next
            cur.next = node   #遇到空再追加
    def insert(selfpos,item):
        '''指定位置添加元素'''
        pass
    def remove(self,item):
        '''删除节点'''
        pass
    def search(self,item):
        '''查找节点是否存在'''
        pass
if __name__=='__main__':
    ll=SingleLinkList()
    print(ll.is_empty())
    print(ll.length())
    ll.append(1)
    print(ll.is_empty())
    print(ll.length())
    ll.append(2)
    ll.append(3)
    ll.append(4)
    ll.append(5)
    ll.travel()

数据结构与算法(Python)Day3(上)(链表、单链表的构造、a,b=b,a)

a,b=b,a本质

a=10
b=20
print(a,b)
a,b=b,a
print(a,b)

数据结构与算法(Python)Day3(上)(链表、单链表的构造、a,b=b,a)
我们发现这是python中特有的语法,在C/C++中尝试运行这段代码的话会直接报错。
数据结构与算法(Python)Day3(上)(链表、单链表的构造、a,b=b,a)

从图中我们可以看到,和C/C++不同的是,python中一切皆为对象,这里的a保存的是对象 (int 10)的地址,b保存的是对象(int 20)的地址。而赋值操作在python中仅仅是改变了引用的指向而已(在C中是将a内所保存的数据(指针地址)改变),因此在python中,不需要静态指定数据类型,因为a所指向的地址已经包含了数据类型。因此python可以实现上述语法,而且不需要静态指定类型。

————————————————
版权声明:本文一小部分出自CSDN博主「东阳z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_22473333/article/details/106944481