用最简单的方式学Python单链表

Python 实现单链表

在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表)。

基于数组的序列和链表都能够对其中的元素保持一定得顺序,但采用的方式截然不同

什么是单链表

单链表 最简单的形式就是由多个节点的集合共同构成一个线性序列。每个节点存储一个对象的引用,这个引用指向序列中的一个元素,即存储指向列表的下一个节点。

其实,上面的术语用生活中的大白话来解释,就是我们现在有三个人——我、你、他。当我用手指指向你,你用手指指向他,这样就形成了一个单链表,手指就是一个引用,而“我、你、他”就是序列中的元素。不知道你理解了没有?

class Node(object):
  '''声明节点'''
  def __init__(self, element):
    self.element = element  # 给定一个元素
    self.next = None # 初始设置下一节点为空

class Singly_linked_list:
  '''单链表'''

  def __init__(self, node=None):
    self.__head = node

  def is_empty(slef):
    '''判断链表是否为空'''
    return self.__head == None

  def length(self):
    '''返回链表长度'''
    cur = self.__head   # cur游标,用来移动遍历节点
    count = 0 # count记录节点数量
    while cur is not None:
      count += 1
      cur = cur.next
    return count

  def travel_list(self):
    '''遍历整个链表,打印每个节点的数据'''
    cur = self.__head
    while cur is not None:
      print(cur.elememt, end=" ")
      cur = cur.next
    print("\n")

  def insert_head(self, element):
    newest = Node(element)  # 创建一个新节点
    if self.is_empty():
      self.__head = newest
    else:
      cur = self.__head
      while cur.next is not None:
        cur = cur.next
      cur.next = newest
   

原文地址:https://www.cnblogs.com/yuzhou-1su/p/11764180.html

时间: 2024-07-31 22:32:51

用最简单的方式学Python单链表的相关文章

python单链表实例分享

有关python单链表的实现代码. 链表的定义:链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列.也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域:另一部分用于存储下一个数据元素地址的指针,称为指针域.链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点.链表中的最后一个结点没有后继元素,其指针域为空. p

栈的简单实现(2)-单链表实现

引言 栈(stack)是一种被广泛使用的线性数据结构,它只允许在表的一端进行插入或删除操作,因而栈也可以被称作为操作受限的线性表 .在栈中,允许插入或删除的一端称作栈顶(top)不允许插入和删除的另一端称作栈底(bottom); 示意图如下: 此文借助单链表简单地实现栈及其基本操作. 代码如下: typedef struct stack{ int data; struct stack* next; }ListStack; 注:这里假设栈中储存的是整型 (int) 的数据 基本操作 1.栈的初始化

一个简单的int型C++单链表的实现

IntSLList.h //************************ intSLList.h ************************** // singly-linked list class to store integers #ifndef INT_LINKED_LIST #define INT_LINKED_LIST class IntSLLNode { public: IntSLLNode() { next = 0; } IntSLLNode(int el, IntSL

python单链表的实现

''' 当加入第一个node节点的时候,会有几个值,(这里的self.tail.next 其实就是node.next) head = item = tail = Node(object element1 memory) item = head = tail = Node(object element1 memory) next = None tail = item = head = Node(object element1 memory) 当加入第二个元素node节点的时候,next1值会改变,

单链表总结篇

[基本概念]单链表即单向链表,数据结构为一个接一个的结点组成,每个结点有两个成员,一个数据域一个指向下一个结点的指针,如下: struct Node { int data; struct Node *next; }; 单链表基本操作包括链表初始化.插入.删除,其中初始化操作是指让单链表存在一个头结点,其数据域随机,头结点指向下一个结点,每次访问都要从头结点开始访问,插入结点方式有两种,尾部插入和结点前部插入,尾部插入很简单与正常的输入顺序一致,而前部插入需要时常变动头结点的指针,始终让他指向新插

以c++的方式实现单链表

之前用c语言的方式实现过单链表,现在用c++的方式实现单链表. 以c++的类实现单链表,写完代码有了许多不一样的体会.感受到了两种语言的差异. #include<iostream> using namespace std; class Slist { private: struct Node { int data; Node* pNext; }; int size; Node* pHead; Node* pTail; Node* ByeNode(int _data) { Node* pNode

Java-找出两个单链表的首个公共节点

单链表中的简单算法 /** * 得到两个单链表的公共结点 * 先求出两个链表的长度,并求出二者的差值dif,两个指针分别指向链表头部,让指向长的链表的指针先向链表尾部移动dif步. * 最后一起一步步移动两个指针,当两个指针都指向同一个结点时,返回那个结点 * @param list1 * @param list2 * @return */ public static ListNode getFirstCommonNode(ListNode list1,ListNode list2){ if(l

Python单例的一种简单写法

最原始的想法就是每个类都重写new方法. class Dog: dog = None def __new__(cls, *args, **kwargs): if cls.dog is None: cls.dog = object.__new__(cls) print('create singleton over') return cls.dog def __init__(self, name): print('init is called') self.name = name # 下面这句话会报

通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能&#39;menufile

通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile 1 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile' 2 #!usr/bin/env python 3 #-*-c