La connaissance des structures de bases en algorithmie est nécessaire pour bien maitriser la programmation.
Les listes chainées sont très utilisées dans les blockchains. Je vais présenter des exemples de manipulation de liste chainées en relation avec un des mécanismes qu'on trouve dans une blockain.
Principes d'une liste chainée.
Notre liste chainée.
class Maillon(): def __init__(self, idblock,valeur): self.idblock = idblock self.valeur= valeur self.prec = None
import random import string class Blockchain: lettre = set(string.ascii_uppercase) lettre = lettre - {'I','O', 'Z'} chiffre = set([x for x in range(1,10)]) possible = lettre | chiffre def __init__(self): self.chaine = []
@classmethod def genere_id(cls): indexblock = [ random.choices(list(cls.possible))[0] for x in range(1,10)] return ''.join(str(x) for x in indexblock) @staticmethod def genere_montant(): return round(random.uniform(20.00, 2000.00), 2)
ma_chaine = Blockchain() un_maillon= Maillon(Blockchain.genere_id(), Blockchain.genere_montant()) ma_chaine.ajoute(un_maillon)
- Recherche du dernier maillon
- Ajout du maillon avec la référence sur le maillon précédent complétée.
def ajoute(self, maillon): maillon.prec = self.recherche_tete() self.chaine.append(maillon)
def recherche_tete(self): cle = None for item in self.chaine: for item2 in self.chaine: if item.idblock == item2.idblock: continue if item2.prec == item.idblock: break else: return item.idblock
import matplotlib.pyplot as plt # Data for plotting t = [0, 500, 1000, 1500, 2000 ] s = [0.0 , 2.91 , 22.8 , 79.00, 191.00] fig, ax = plt.subplots() ax.plot(t, s) ax.set(xlabel='nombre de maillon', ylabel='duree', title='visualisation') ax.grid() plt.show()lock
def ajoute_sentinelle(self): return Maillon('0'* 10, None) def ajoute(self, maillon,sentinelle= None): if sentinelle: _tmp_maillon =self.recherche_la_sentinelle() maillon.prec = _tmp_maillon.prec _tmp_maillon.prec = maillon.idblock else: maillon.prec = self.recherche_tete() self.chaine.append(maillon)



























