python之单链表

本文探讨了Python中如何实现单链表,包括定义、实现、常见操作,并对比了链表与顺序表的区别。作者通过实例解释了current和current.next在链表操作中的不同,并分享了从C语言到Python实现链表的心得体会。
摘要由CSDN通过智能技术生成

前置疑问

Q1 C语言中实现单链表需要用到结构体,python中如何实现?
Q2 面向过程和面向对象实现一个单链表到底有什么不同的感受?


学习内容

1、定义单链表
2、单链表的实现
3、单链表的方法
4、单链表和顺序表的区别


学习时突发疑问

Q3 python中实现链表的时候,为什么要定义两个类Node一个SingleList
Q4 current和current.next 分别代表什么?
Q5 什么时候用current?什么时候用current.next?


学习产出

1、定义单链表

  1. 单链表是线性表,一个单链表是由一个一个节点构成,每个节点有两个域,一个数据域,一个指针域。
  2. “链”表示是一个接着一个,如何实现这种表示,前面一个节点指针域存放后一个节点的地址。谁在谁前面就是前驱,谁在谁后面就是后继,头节点不存在前驱,尾结点不存在后继。

2、单链表的实现

A1

  1. 节点的表示
    用C语言面向过程表示,可以用typedef + struct 来表示一个节点如下:
typedef struct node
{
	ElemType data;
	struct node *next;
}Node, *LinkList;

但是刚学完python如何实现这个节点呢?用类,造一个出来

class Node:
	def __init__(self, data):
	    self.data = data
	    self.next = None
  1. 链表的表示

C语言中用如下方法表示创建好了一个链表L

LinkList L = (LinkList)malloc(sizeof(Node));
L->next = NULL

在这里插入图片描述

class SingleList:

    """实现单链表"""
    def __init__(self, node=None):
        self._head = node

my_list = SingleList()

在这里插入图片描述
在这里插入图片描述
图片由python Tutor生成

A3
为什么要创建两个类呢?因为最终的操作是只用链表这个对象去操作里面的节点,节点是一个对象,需要一个类,链表也是个对象,也需要个类。

3、单链表的常规操作

  1. is_empty
'''判断链表是否为空'''

    def is_empty(self):
        return self._head is None
  1. length
    def length(self):
        current = self._head
        count = 0
        while current is not None:
            count += 1
            current = current.next

        return count
  1. travel
'''遍历链表'''
    def travel(self):
        current = self._head
        while current is not None:
            print("{0}".format(current.data), end=" ")
            current = current.next
        print(" ")
  1. add
'''在链表头部插入节点,头插法'''
    def add(self, item):
        node = Node(item)
        if self.is_empty():
            self._head = node
        else:
            node.next = self._head
            self._head = node
  1. append
'''在链表尾部插
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值