...suplimentara sau se renunta la ea.Pentru alocarea dinamica utilizam tipul de date referinta.Se considera secventa de programtype refinrinrrecordnrintegeradrurmrefendvar crefAici variabila c este o variabila de tip referinta.Ea retine adrese de inregistrari.La randul ei,o inregistrare are doua campurinr,care retine un numar intreginformatia utila si adrurmadresa urmatoare care retine adresa unei alte inregistrari.Procedura NEc rezerva spatiuun numar de octeti consecutivi pentru o inregistrare,adresa primului octet fiind depusa in variabila c.Presupunem ca variabila c contine adresa unei inregistrari.Procedura DISPOSEc elibereaza spatiul de memorie afectat acelei inregistrari care avea adresa in c.Cuvantul cheie NIL are semnificatia nici o adresa.Observatii1c se refera la adresa care se gaseste in variabila c2c.nr se refera la campul numeric al inregistrarii care are adresa memorata in variabila c3c.adrurm semnifica adresa de inregistrare care se gaseste memorata in cadrul inregistrarii care are adresa c4c.adrurm.nr semnifica variabila nr care se gaseste in inregistrarea care are adresa plasata in campul adrurm al inregistrarii cu adresa c.Observatie foarte importantaspatiul necesar variabilelor alocate dinamic se rezerva intr-o zona de memori,special destinata,numita HEAPpentru PC compatibila IBM4.2 Lista liniara dublu inlantuitaO lista dublu inlantuita este o structura de date de formaOperatiile pe care le facem cu o lista dublu inlantuita sunt urmatoarelecreareadaugare la dreapataadaugare la stangaadaugare in interiorul listeistergere din interiorul listeistergere la stanga listeistergere la dreapta listeilistare de la stanga la dreaptalistare de la dreapta la stanga4.2.1 CreareO lista dublu inlantuita se creeaza cu o singura inregistrare .Pentru a ajunge la numarul de inregistrari dorit,utilizam proceduri de adaugare la stanga sau la dreapta.Putem realiza o procedura numita creare care sa realizeze urmatoarelecitirea informatiei utilealocarea de spatiu pentru inregistrare completarea inregistrarii cu informatia utilacompletarea adreselor de legatura la stanga si la dreapta cu NILvariabilele tip referinta b si s vor capata valoarea adresei acestei prime inregistrarib semnifica adresa inregistrarii cea mai din stanga,s adresa ultimei inregistrari din dreaptaprocedure crearevar b,s refbeginritenreadlnnnebb.nrnb.asnilb.adnilsbendPro
cedura se va apela creareb,s4.2.2 Adaugarea la dreaptaAceasta operatie este realizata de procedura adrr.Pentru adaugarea unei inregistrari se realizeaza urmatoarele operatiicitirea informatiei utilealocarea spatiului pentru inregistrarecompletarea adresei la dreapta cu NILcompletarea adresei din stanga cu adresa celei mai din dreapta inregistrariretinute in variabila smodificarea campului de adresa la dreapta a inregistrarii din s cu adresa noii inregistraris va lua valoarea noii inregistrari,deoarece acesta va fi cea mai din dreapta.procedure addr var srefvar drefbeginritenreadlnnnedd.nrnd.assd.adnils.addsden
dProcedura se va apela addrs4.2.3 Adaugare in interiorul listeiAceasta operatie este realizata de procedura includ,care realizeaza urmatoarele operatiiparcurge lista de la stanga la dreapta cautand inregistrarea cu informatia utila m,in dreapta careia urmeaza sa introducem noua inregistrareciteste informatia utilaaloca spatiu pentru noua inregistrarecompleteaza informatia utilaadresa stanga a noii inregistrari ia valoarea adresei inregistrarii de informatie utila madresa stanga a inregistrarii care urma la acest moment inregistrarii cu informatia utila m capata valoarea adresei noii inregistrariprocedure includmintegerbrefvar d,erefbegindbhile d.nrm do dd.adritenreadlnnneee.nrne.asdd.ad.asee.add.add.ad
eendProcedura se va apela includm,b4.2.4 Stergerea in interiorul listeiAceasta operatie este realizata de procedura sterg.Operatiile efectuate de aceasta procedura sunt urmatoarelese parcurge lista de la stanga la dreapta pentru a ne pozitiona pe inregistrarea care urmeaza a fi stearsacampul de adresa dreapta al inregistrarii care o precede pe aceasta va lua valoarea campului de adresa dreapta al inregistrarii care va fi stearsacampul de adresa stanga al inregistrarii care urmeaza inregistrarii care va fi stearsa va lua valoarea campului de adresa stanga al inregistrarii pe care o stergemse elibereaza spatiul de memorie rezervat inregistrarii care se stergeprocedure stergmintegerbrefvar drefbegindbhile d.nrm do dd.add.as.add.add.ad.asd.asdisosedendProcedura se va apela stergm,b4.2.5 Listare de la stanga la dreaptaAceasta operatie este realizata de procedura listare,procedura care realizeaza urmatoarele operatiiporneste din stanga listeiatat timp cat nu s-a ajuns la capatul din dreapta al listei,se tipareste informatia utila si se trece la inregistrarea urmatoareprocedure listarebrefvar drefbegindbhile dnil do beginritelnd.nrdd.adendendProcedura se apeleaza listarebadrn-1 inn nilnil in1 adr2 aaaaaar2 adr2adr1 in2 adr3i9bx9sDci4ŕSyajIIIIIIIaHBCJmHphsHBmHphsHBphBm
HphsH!ajBCJUmHnHphuBmHphsHBCJOJaQJaphBCJOJaQJamHphs
HBCJmHphsHBCJphBph8iL89HTansxaaaaFaaa6789sDcSEaaaaF
aahhaFaaaEseih4ŕ5...
Download