Diferența dintre Array și Lista Legată

Autor: Laura McKinney
Data Creației: 3 Aprilie 2021
Data Actualizării: 7 Mai 2024
Anonim
Array vs. Single Linked List (In Terms of Representation)
Video: Array vs. Single Linked List (In Terms of Representation)

Conţinut


Diferența majoră între mulțime și Lista de legături în ceea ce privește structura lor. Schițele sunt bazat pe index structura de date în care fiecare element asociat cu un index. Pe de altă parte, Lista pe care se bazează se bazează referințe unde fiecare nod este format din date și referințe la elementul anterior și următorul.

Practic, un tablou este un set de obiecte de date similare stocate în locații secvențiale de memorie sub un titlu comun sau un nume variabil.

În timp ce o listă legată este o structură de date care conține o secvență de elemente în care fiecare element este legat de următorul său element. Există două câmpuri într-un element al listei legate. Unul este câmpul de date, iar celălalt este câmpul de legături, câmpul de date conține valoarea reală care trebuie stocată și procesată. Mai mult, câmpul de link deține adresa următorului articol de date din lista de legături. Adresa folosită pentru a accesa un anumit nod este cunoscută sub numele de pointer.


O altă diferență semnificativă între un tablou și o listă legată este că Array are o dimensiune fixă ​​și trebuie să fie declarată anterior, dar Lista Legată nu este restricționată la dimensiuni și extinderea și contractarea în timpul execuției.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațiemulțimeLista de legături
De bazăEste un set consistent dintr-un număr fix de articole de date.Este un set ordonat care cuprinde un număr variabil de elemente de date.
mărimeaPrecizat în timpul declarației.Nu este necesară specificarea; crește și se micșorează în timpul execuției.
Alocare stocare Locația elementului este alocată în timpul compilării.Poziția elementului este atribuită în timpul rulării.
Ordinea elementelor Stocat consecutiv Stocat la întâmplare
Accesarea elementuluiAccesați direct sau aleatoriu, adică, specificați indexul sau abonamentul tabloului.Accesat secvențial, adică, Traverse începând de la primul nod din listă de către indicatorul.
Inserarea și ștergerea elementuluiÎncet relativ relativ la schimbarea este necesară.Mai ușor, rapid și eficient.
In cautarea Căutare binară și căutare liniarăcăutare liniară
Memorie necesarăMai puțin Mai Mult
Utilizarea memorieiineficaceEficient


Definiția Array

Un tablou este definit ca un set de un număr definit de elemente omogene sau elemente de date. Înseamnă că un tablou poate conține un singur tip de date, fie toate numerele întregi, toate numerele în virgulă mobilă sau toate caracterele. Declarația unui tablou este următoarea:
int a;
În cazul în care int specifică tipurile de date sau tipurile de date stocate de tablouri. „A” este numele unui tablou, iar numărul specificat în parantezele pătrate este numărul de elemente pe care un tablou le poate stoca, acesta se numește și dimensiunea sau lungimea tabloului.

Să ne uităm la unele dintre conceptele de amintit despre tablouri:

  • La elementele individuale ale unui tablou pot fi accesate descriind numele tabloului, urmat de index sau abonament (determinarea locației elementului din tablou) în parantezele pătrate. De exemplu, pentru a prelua cel de-al cincilea element al tabloului, trebuie să scriem o declarație a.
  • În orice caz, elementele unui tablou vor fi stocate într-o locație de memorie consecutivă.
  • Primul element al tabloului are indicele zero. Înseamnă că primul și ultimul element va fi specificat ca a și respectiv.
  • Numărul de elemente care pot fi stocate într-un tablou, adică, dimensiunea unui tablou sau lungimea acestuia este dată de următoarea ecuație:
    (legătură superioară-limită inferioară) + 1
    Pentru tabloul de mai sus, ar fi (9-0) + 1 = 10. Unde 0 este limita inferioară a tabloului, iar 9 este limita superioară a tabloului.
  • Schițele pot fi citite sau scrise prin buclă. Dacă citim tabloul unidimensional, este nevoie de o buclă pentru citire și alta pentru scrierea (ing) tabloul, de exemplu:
    A. Pentru citirea unui tablou
    pentru (i = 0; i <= 9; i ++)
    {scanf („% d”, & a); }
    b. Pentru scrierea unui tablou
    pentru (i = 0; i <= 9; i ++)
    {f („% d”, a); }
  • În cazul unui tablou 2-D, ar fi nevoie de două bucle și, în mod similar, un tablou n-dimensional ar avea nevoie de n bucle.

Operațiunile efectuate pe tablouri sunt:

  1. Crearea tabloului
  2. Traversarea unui tablou
  3. Inserarea de elemente noi
  4. Ștergerea elementelor necesare.
  5. Modificarea unui element.
  6. Fuziunea tablelor

Exemplu

Programul următor ilustrează citirea și scrierea tabloului.

#include
#include
void main ()
{
int a, i;
f ("Introduceți tabloul");
pentru (i = 0; i <= 9; i ++)
{
scanf ("% d", & a);
}
f ("Introduceți tabloul");
pentru (i = 0; i <= 9; i ++)
{
f ("% d n", a);
}
getch ();
}

Definiția Linked List

Lista legată este o listă particulară a unor elemente de date legate între ele. În acest sens, fiecare element indică elementul următor care reprezintă ordonarea logică. Fiecare element se numește nod, care are două părți.

INFO parte care stochează informațiile și POINTER care indică elementul următor. După cum știți pentru stocarea adresei, avem structuri de date unice în C numite indicatoare. Prin urmare, cel de-al doilea câmp al listei trebuie să fie de tip pointer.

Tipurile de liste conexe sunt Lista individuală legată, Lista dublată, Lista circulară conexă, Lista circulară dublă.

Operațiunile efectuate pe Lista Legată sunt:

  1. Creare
  2. pendulare
  3. inserare
  4. ștergere
  5. In cautarea
  6. înlănțuire
  7. Afişa

Exemplu

Următorul fragment ilustrează crearea unei liste conectate:

nod struct
{
numere int;
nod stuct * următor;
}
start = NULL;
void create ()
{
nodul structedef NODE;
NOD * * p, * q;
alegere char;
primul = NULL;
do
{
p = (NODE *) malloc (sizeof (NODE));
f ("Introduceți elementul de date n");
scanf ("% d", & p -> num);
if (p == NULL)
{
q = start;
while (q -> next! = NULL)
{q = q -> următor
}
p -> următor = q -> următor;
q -> = p;
}
altfel
{
p -> următor = start;
start = p;
}
f ("Doriți să continuați (tastați y sau n)? n");
scanf ("% c", & alegere);
}
while ((choice == y) || (alegere == Y));
}

  1. O matrice este structura de date conține o colecție de elemente de date de tip similar, în timp ce lista Link este considerată ca structură de date non-primitive conține o colecție de elemente legate neordonate cunoscute sub numele de noduri.
  2. În tablou elementele aparțin indexurilor, adică, dacă doriți să intrați în cel de-al patrulea element, trebuie să scrieți numele variabilei cu indexul sau locația acestuia în paranteza pătrată.
    Cu toate acestea, într-o listă legată, trebuie să începeți de la cap și să vă prelucrați până ajungeți la al patrulea element.
  3. În timp ce accesarea unui tablou de elemente este rapidă, în timp ce Lista Linked durează liniar, deci este destul de lent.
  4. Operațiuni precum inserarea și ștergerea în tablouri consumă mult timp. Pe de altă parte, performanța acestor operațiuni în listele conexe este rapidă.
  5. Schițele au dimensiuni fixe. În schimb, listele legate sunt dinamice și flexibile și pot extinde și contracta dimensiunea acesteia.
  6. Într-un tablou, memoria este alocată în timpul compilării, în timp ce într-o listă Linked este alocată în timpul execuției sau runtime.
  7. Elementele sunt stocate consecutiv în tablouri, în timp ce sunt stocate la întâmplare în listele legate.
  8. Cerința de memorie este mai mică datorită datelor stocate în indexul din tablă. Spre deosebire, este nevoie de mai multă memorie în Listele legate datorită stocării de elemente suplimentare de referință următoare și anterioare.
  9. În plus, utilizarea memoriei este ineficientă în tablou. În schimb, utilizarea memoriei este eficientă în tablou.

Concluzie

Listele Array și Linked sunt tipurile de structuri de date diferă în structura lor, metode de accesare și manipulare, cerință de memorie și utilizare. Și au un avantaj și dezavantaj deosebit față de implementarea sa. În consecință, oricare poate fi utilizat în funcție de necesități.