Table des matières
Liste chaînée
Python
Liste chaînée circulaire unidirectionnelle
Maison développement back-end Tutoriel Python [Python Learning] Implémentation de la syntaxe Python d'une liste chaînée circulaire unidirectionnelle

[Python Learning] Implémentation de la syntaxe Python d'une liste chaînée circulaire unidirectionnelle

Apr 09, 2019 am 10:35 AM
python 链表


Toutes les études précédentes C'est une implémentation de liste chaînée écrite en langage C. Aujourd'hui, je vais vous amener à apprendre à écrire une liste chaînée circulaire unidirectionnelle en python.

Liste chaînée

La liste chaînée est une structure de données de base commune, mais elle ne stocke pas les données en continu comme une liste séquentielle. informations (c'est-à-dire adresse) du nœud suivant dans chaque nœud (unité de stockage de données).

[Python Learning] Implémentation de la syntaxe Python dune liste chaînée circulaire unidirectionnelle

Python

Liste chaînée circulaire unidirectionnelle

Une variante de liste chaînée unique est une liste chaînée circulaire unidirectionnelle , le dernier de la liste chaînée. Le champ suivant du nœud n'est plus Aucun, mais pointe vers le nœud principal de la liste chaînée.

[Python Learning] Implémentation de la syntaxe Python dune liste chaînée circulaire unidirectionnelle

Implémentation de la grammaire :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

class Node(object):

    """结点类"""

 

 

    def __init__(self, item):

        self.item = item

        self.next = None

 

 

class CyclesSingleLinkList():

    """单向循环链表"""

 

 

    def __init__(self, node=None):

        self.__head = node

 

 

    def is_empty(self):

        """链表是否为空

        :return 如果链表为空 返回真

        """

        return self.__head is None

 

 

    def length(self):

        """链表长度"""

        # 如果是空链表

        if self.is_empty():

            return 0

        cur = self.__head

        count = 1

        while cur.next != self.__head:

            count += 1

            cur = cur.next

        return count

 

 

    def travel(self):

        """遍历整个链表"""

        if self.is_empty():

            print("")

            return

        cur = self.__head

        while cur.next != self.__head:

            print(cur.item, end=" ")

            cur = cur.next

        # 从循环退出,cur指向的是尾结点

        print(cur.item)

 

 

    def add(self, item):

        """链表头部添加元素

        :param item: 要保存的具体数据

        """

        node = Node(item)

        if self.is_empty():

            self.__head = node

            node.next = node

        # 寻找尾结点

        cur = self.__head

        while cur.next != self.__head:

            cur = cur.next

        # 从循环中退出,cur指向尾结点

        node.next = self.__head

        self.__head = node

        cur.next = self.__head

 

 

    def append(self, item):

        """链表尾部添加元素"""

        node = Node(item)

        #如果列表为空,直接添加结点

        if self.is_empty():

            self.__head = node

            node.next = node

        else:

            cur = self.__head

            while cur.next != self.__head:

                cur = cur.next

            #退出循环的时候,cur指向尾结点

            cur.next = node

            node.next = self.__head

 

 

    def insert(self, pos, item):

        """指定位置添加元素"""

        # 在头部添加元素

        if pos <= 0:

            self.add(item)

        # 在尾部添加元素

        elif pos >= self.length():

            self.append(item)

        else:

            cur = self.__head

            count = 0

            while count < (pos - 1):

                count += 1

                cur = cur.next

            # 退出循环的时候,cur指向pos前一个位置

            # node插入到pos位置前

            node = Node(item)

            node.next = cur.next

            cur.next = node

 

 

    def remove(self,item):

        """删除结点"""

        if self.is_empty():

            return

        # 当前游标

        cur = self.__head

        # 当前游标的上一个游标

        pre = None

        while cur.next != self.__head:

            # 找到了要删除的元素

            if cur.item == item:

                # 在头部找到了元素

                if cur == self.__head:

                    # 先找到尾结点

                    rear = self.__head

                    while rear.next != self.__head:

                        rear = rear.next

                    # 退出循环后,rear指向尾结点

                    self.__head = cur.next

                    rear.next = self.__head

                else:

                    # 在中间位置找到了元素

                    pre.next = cur.next

                return

            # 不是要找的元素,移动游标

            pre = cur

            cur = cur.next

        # 退出循环后,cur指向尾结点

        if cur.item == item:

            # 链表只有一个节点

            if cur == self.__head:

                self.__head = None

            else:

                pre.next = self.__head

 

 

    def search(self,item):

        """查找结点是否存在"""

        if self.is_empty():

            return False

        cur = self.__head

        while cur.next != self.__head:

            if cur.item == item:

                return True

            cur = cur.next

        # 退出循环后,cur指向为尾结点

        if cur.item == item:

            return True

        return False

 

 

if __name__ == &#39;__main__&#39;:

    ll = CyclesSingleLinkList()

    print(ll.length())

    ll.travel()

 

 

    ll.append(1)

    print(ll.length()) #1

    ll.travel() #1

 

 

    ll.add(2)

    print(ll.length()) #2

    ll.travel()#2 1

 

 

    ll.insert(1,3)

    ll.travel() #2 3 1

 

 

    ll.remove(1)

    ll.travel() #2 3

Copier après la connexion

[Recommandation de cours : Tutoriel vidéo Python]


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP et Python: exemples de code et comparaison PHP et Python: exemples de code et comparaison Apr 15, 2025 am 12:07 AM

PHP et Python ont leurs propres avantages et inconvénients, et le choix dépend des besoins du projet et des préférences personnelles. 1.Php convient au développement rapide et à la maintenance des applications Web à grande échelle. 2. Python domine le domaine de la science des données et de l'apprentissage automatique.

Comment entraîner le modèle Pytorch sur Centos Comment entraîner le modèle Pytorch sur Centos Apr 14, 2025 pm 03:03 PM

Une formation efficace des modèles Pytorch sur les systèmes CentOS nécessite des étapes, et cet article fournira des guides détaillés. 1. Préparation de l'environnement: Installation de Python et de dépendance: le système CentOS préinstalle généralement Python, mais la version peut être plus ancienne. Il est recommandé d'utiliser YUM ou DNF pour installer Python 3 et Mettez PIP: sudoyuMupDatePython3 (ou sudodnfupdatepython3), pip3install-upradepip. CUDA et CUDNN (accélération GPU): Si vous utilisez Nvidiagpu, vous devez installer Cudatool

Python vs JavaScript: communauté, bibliothèques et ressources Python vs JavaScript: communauté, bibliothèques et ressources Apr 15, 2025 am 12:16 AM

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Comment est la prise en charge du GPU pour Pytorch sur Centos Comment est la prise en charge du GPU pour Pytorch sur Centos Apr 14, 2025 pm 06:48 PM

Activer l'accélération du GPU Pytorch sur le système CentOS nécessite l'installation de versions CUDA, CUDNN et GPU de Pytorch. Les étapes suivantes vous guideront tout au long du processus: CUDA et CUDNN Installation détermineront la compatibilité de la version CUDA: utilisez la commande NVIDIA-SMI pour afficher la version CUDA prise en charge par votre carte graphique NVIDIA. Par exemple, votre carte graphique MX450 peut prendre en charge CUDA11.1 ou plus. Téléchargez et installez Cudatoolkit: visitez le site officiel de Nvidiacudatoolkit et téléchargez et installez la version correspondante selon la version CUDA la plus élevée prise en charge par votre carte graphique. Installez la bibliothèque CUDNN:

Explication détaillée du principe docker Explication détaillée du principe docker Apr 14, 2025 pm 11:57 PM

Docker utilise les fonctionnalités du noyau Linux pour fournir un environnement de fonctionnement d'application efficace et isolé. Son principe de travail est le suivant: 1. Le miroir est utilisé comme modèle en lecture seule, qui contient tout ce dont vous avez besoin pour exécuter l'application; 2. Le Système de fichiers Union (UnionFS) empile plusieurs systèmes de fichiers, ne stockant que les différences, l'économie d'espace et l'accélération; 3. Le démon gère les miroirs et les conteneurs, et le client les utilise pour l'interaction; 4. Les espaces de noms et les CGROUP implémentent l'isolement des conteneurs et les limitations de ressources; 5. Modes de réseau multiples prennent en charge l'interconnexion du conteneur. Ce n'est qu'en comprenant ces concepts principaux que vous pouvez mieux utiliser Docker.

Comment choisir la version Pytorch sous Centos Comment choisir la version Pytorch sous Centos Apr 14, 2025 pm 02:51 PM

Lors de la sélection d'une version Pytorch sous CentOS, les facteurs clés suivants doivent être pris en compte: 1. CUDA Version Compatibilité GPU Prise en charge: si vous avez NVIDIA GPU et que vous souhaitez utiliser l'accélération GPU, vous devez choisir Pytorch qui prend en charge la version CUDA correspondante. Vous pouvez afficher la version CUDA prise en charge en exécutant la commande nvidia-SMI. Version CPU: Si vous n'avez pas de GPU ou que vous ne souhaitez pas utiliser de GPU, vous pouvez choisir une version CPU de Pytorch. 2. Version Python Pytorch

Comment installer nginx dans Centos Comment installer nginx dans Centos Apr 14, 2025 pm 08:06 PM

CENTOS L'installation de Nginx nécessite de suivre les étapes suivantes: Installation de dépendances telles que les outils de développement, le devet PCRE et l'OpenSSL. Téléchargez le package de code source Nginx, dézippez-le et compilez-le et installez-le, et spécifiez le chemin d'installation AS / USR / LOCAL / NGINX. Créez des utilisateurs et des groupes d'utilisateurs de Nginx et définissez les autorisations. Modifiez le fichier de configuration nginx.conf et configurez le port d'écoute et le nom de domaine / adresse IP. Démarrez le service Nginx. Les erreurs communes doivent être prêtées à prêter attention, telles que les problèmes de dépendance, les conflits de port et les erreurs de fichiers de configuration. L'optimisation des performances doit être ajustée en fonction de la situation spécifique, comme l'activation du cache et l'ajustement du nombre de processus de travail.

Comment faire fonctionner la formation distribuée de Pytorch sur CentOS Comment faire fonctionner la formation distribuée de Pytorch sur CentOS Apr 14, 2025 pm 06:36 PM

La formation distribuée par Pytorch sur le système CentOS nécessite les étapes suivantes: Installation de Pytorch: La prémisse est que Python et PIP sont installés dans le système CentOS. Selon votre version CUDA, obtenez la commande d'installation appropriée sur le site officiel de Pytorch. Pour la formation du processeur uniquement, vous pouvez utiliser la commande suivante: pipinstalltorchtorchVisionTorChaudio Si vous avez besoin d'une prise en charge du GPU, assurez-vous que la version correspondante de CUDA et CUDNN est installée et utilise la version Pytorch correspondante pour l'installation. Configuration de l'environnement distribué: la formation distribuée nécessite généralement plusieurs machines ou des GPU multiples uniques. Lieu

See all articles