Mae rhestrau cysylltiedig yn strwythurau data hanfodol yn y byd rhaglennu, ac maent yn cynnig dulliau effeithiol o storio a rheoli data. Yn yr erthygl hon, byddwn yn archwilio rhestrau cysylltiedig yn Ruby, gan drafod eu strwythur, eu manteision, a sut i'w defnyddio. Byddwn hefyd yn cynnwys enghreifftiau o god i helpu i ddangos sut mae rhestrau cysylltiedig yn gweithio yn ymarferol.
Mae rhestr gysylltiedig yn strwythur data sy'n cynnwys cyfres o nodau, lle mae pob nod yn cynnwys dwy elfen: gwerth a chysylltiad â'r nod nesaf. Mae hyn yn wahanol i dablau, sy'n defnyddio cyfeiriadau cyson i storio data. Mae rhestrau cysylltiedig yn cynnig mwy o hyblygrwydd wrth ychwanegu neu ddileu nodau, gan nad ydynt yn gorfod symud data fel y byddai'n digwydd mewn tabl.
Mae'r strwythur sylfaenol ar gyfer nod yn rhestr gysylltiedig yn cynnwys:
Mae'r nodau hyn yn gysylltiedig â'i gilydd, gan greu cadwyn o nodau. Mae'r nod cyntaf yn y rhestr yn cael ei alw'n "pen" neu "ben rhestr," ac mae'r nod olaf yn cael ei alw'n "gwrthrych" neu "gwrthrych olaf."
Mae rhestrau cysylltiedig yn cynnig nifer o fanteision dros dablau, gan gynnwys:
Mae yna sawl math o rhestrau cysylltiedig, gan gynnwys:
Mae creu rhestr gysylltiedig yn Ruby yn syml. Gadewch i ni edrych ar sut i greu rhestr gysylltiedig unffordd. Yn gyntaf, bydd angen i ni greu dosbarth ar gyfer y nod:
class Node attr_accessor :value, :next_node def initialize(value) @value = value @next_node = nil end end
Yma, rydym wedi creu dosbarth Node sy'n cynnwys gwerth a chysylltiad â'r nod nesaf. Nawr, gadewch i ni greu dosbarth ar gyfer y rhestr gysylltiedig:
class LinkedList attr_accessor :head def initialize @head = nil end def append(value) new_node = Node.new(value) if @head.nil? @head = new_node else current = @head current = current.next_node while current.next_node current.next_node = new_node end end def display current = @head while current print "#{current.value} -> " current = current.next_node end puts "nil" end end
Yn y dosbarth LinkedList, rydym wedi creu dull i ychwanegu nodau a dull i ddangos y rhestr. Gallwn nawr ddefnyddio'r dosbarth hwn i greu rhestr gysylltiedig:
list = LinkedList.new list.append(1) list.append(2) list.append(3) list.display
Pan fyddwn yn rhedeg y cod hwn, byddwn yn gweld y canlyniad canlynol:
1 -> 2 -> 3 -> nil
Mae'n bwysig gallu gweithredu ar y rhestr gysylltiedig. Gadewch i ni ychwanegu dulliau i ddileu nod a chanfod gwerth:
def delete(value) return if @head.nil? if @head.value == value @head = @head.next_node return end current = @head while current.next_node if current.next_node.value == value current.next_node = current.next_node.next_node return end current = current.next_node end end def find(value) current = @head while current return current if current.value == value current = current.next_node end nil end
Yma, rydym wedi creu dull delete i ddileu nod o'r rhestr a dull find i chwilio am nod. Gallwn nawr ddefnyddio'r dulliau hyn:
list.append(4) list.append(5) list.display list.delete(3) list.display found_node = list.find(2) puts found_node ? "Found: #{found_node.value}" : "Not found"
Pan fyddwn yn rhedeg y cod hwn, byddwn yn gweld:
1 -> 2 -> 3 -> 4 -> 5 -> nil 1 -> 2 -> 4 -> 5 -> nil Found: 2
Mae rhestrau cysylltiedig yn strwythurau data pwerus sy'n cynnig hyblygrwydd a chynhyrchedd. Mae Ruby yn cynnig dulliau syml a chynhwysfawr i greu a rheoli rhestrau cysylltiedig. Trwy ddeall y strwythur a'r gweithrediadau sylfaenol, gallwch ddechrau defnyddio rhestrau cysylltiedig yn eich prosiectau Ruby.
Gobeithio bod yr erthygl hon wedi bod yn ddefnyddiol i chi wrth ddysgu am rhestrau cysylltiedig yn Ruby. Peidiwch ag oedi i archwilio mwy a chreu eich fersiwn eich hun o'r strwythur hwn!
© 2024 RailsInsights. All rights reserved.