2024. január 14., vasárnap

Csatolt lista létrehozása Rubyban

 Ruby-ban egy csatolt lista, valamint függvény, amelyet végigiterálnak a csatolt listán, kiírják az értékeket, rendezik a listát, megtalálják és törlik a csomópontokat:

class CsomoPont
  attr_accessor :adat, :kovetkezo

  def initialize(adat)
    @adat = adat
    @kovetkezo = nil
  end
end

def kiir_csatolt_listat(fej)
  jelenlegi = fej
  while jelenlegi
    print "#{jelenlegi.adat} "
    jelenlegi = jelenlegi.kovetkezo
  end
  puts
end

def rendez_csatolt_listat(fej)
  adatok = []
  jelenlegi = fej

  while jelenlegi
    adatok.push(jelenlegi.adat)
    jelenlegi = jelenlegi.kovetkezo
  end

  rendezett_adatok = adatok.sort

  rendezett_fej = CsomoPont.new(rendezett_adatok[0])
  akt = rendezett_fej

  for i in 1..(rendezett_adatok.length - 1)
    akt.kovetkezo = CsomoPont.new(rendezett_adatok[i])
    akt = akt.kovetkezo
  end

  rendezett_fej
end

def torol_csomopontot(fej, cel_adat)
  jelenlegi = fej
  elozo = nil

  while jelenlegi && jelenlegi.adat != cel_adat
    elozo = jelenlegi
    jelenlegi = jelenlegi.kovetkezo
  end

  if jelenlegi.nil?
    puts "A csomópont nem található."
    return fej
  end

  if elozo
    elozo.kovetkezo = jelenlegi.kovetkezo
  else
    fej = jelenlegi.kovetkezo
  end

  fej
end

# Példa csatolt lista létrehozása
fej = CsomoPont.new(4)
fej.kovetkezo = CsomoPont.new(2)
fej.kovetkezo.kovetkezo = CsomoPont.new(1)
fej.kovetkezo.kovetkezo.kovetkezo = CsomoPont.new(3)

# Csatolt lista kiírása
puts "Eredeti lista:"
kiir_csatolt_listat(fej)

# Csatolt lista rendezése
rendezett_fej = rendez_csatolt_listat(fej)
puts "Rendezett lista:"
kiir_csatolt_listat(rendezett_fej)

# Csomópont törlése
torlendo_adat = 2
fej = torol_csomopontot(fej, torlendo_adat)
puts "A(z) #{torlendo_adat} értékű csomópontot töröltük:"
kiir_csatolt_listat(fej)


Létrehoztam egy CsomoPont osztályt, majd egy kiir_csatolt_listat függvényt, ami végigiterál a csatolt listán és kiírja az értékeket. A rendez_csatolt_listat függvény rendez egy csatolt listát, a torol_csomopontot függvény pedig megtalálja és törli a megadott értékű csomópontot.


Csomópont rendezése és törlése csatolt listában:

class CsomoPont
  attr_accessor :adat, :kovetkezo

  def initialize(adat)
    @adat = adat
    @kovetkezo = nil
  end
end

def kiir_csatolt_listat(fej)
  jelenlegi = fej
  while jelenlegi
    print "#{jelenlegi.adat} "
    jelenlegi = jelenlegi.kovetkezo
  end
  puts
end

def rendez_csatolt_listat(fej)
  return nil if fej.nil?

  adatok = []
  jelenlegi = fej

  while jelenlegi
    adatok.push(jelenlegi.adat)
    jelenlegi = jelenlegi.kovetkezo
  end

  rendezett_adatok = adatok.sort

  rendezett_fej = CsomoPont.new(rendezett_adatok[0])
  akt = rendezett_fej

  for i in 1..(rendezett_adatok.length - 1)
    akt.kovetkezo = CsomoPont.new(rendezett_adatok[i])
    akt = akt.kovetkezo
  end

  rendezett_fej
end

def torol_csomopontot(fej, cel_adat)
  return nil if fej.nil?

  if fej.adat == cel_adat
    return fej.kovetkezo
  end

  jelenlegi = fej
  elozo = nil

  while jelenlegi && jelenlegi.adat != cel_adat
    elozo = jelenlegi
    jelenlegi = jelenlegi.kovetkezo
  end

  return fej if jelenlegi.nil?

  elozo.kovetkezo = jelenlegi.kovetkezo
  fej
end

# Példa csatolt lista létrehozása
fej = CsomoPont.new(4)
fej.kovetkezo = CsomoPont.new(2)
fej.kovetkezo.kovetkezo = CsomoPont.new(1)
fej.kovetkezo.kovetkezo.kovetkezo = CsomoPont.new(3)

# Csatolt lista kiírása
puts "Eredeti lista:"
kiir_csatolt_listat(fej)

# Csatolt lista rendezése
rendezett_fej = rendez_csatolt_listat(fej)
puts "Rendezett lista:"
kiir_csatolt_listat(rendezett_fej)

# Csomópont törlése
torlendo_adat = 2
fej = torol_csomopontot(fej, torlendo_adat)
puts "A(z) #{torlendo_adat} értékű csomópontot töröltük:"
kiir_csatolt_listat(fej)

A rendez_csatolt_listat függvény a csomópontokat egy listába gyűjti, majd ezt a listát rendezve létrehoz 
egy új csatolt listát. A torol_csomopontot függvény megtalálja és törli a megadott értékű csomópontot a
 csatolt listából. Az eredményeket kiírja a kiir_csatolt_listat függvény segítségével.

Nincsenek megjegyzések:

Megjegyzés küldése