Põhimõtteliselt on massiiv sarnaste andmete objektide kogum, mis on salvestatud järjestikuste mälukohtade alla ühise pealkirja või muutuja nime all.
Kui linkide loend on andmestruktuur, mis sisaldab nende elementide järjestust, kus iga element on seotud selle järgmise elemendiga. Seotud loendi elemendis on kaks välja. Üks on andmevälja ja teine linkivälja, andmeväljal on salvestatav ja töödeldav tegelik väärtus. Lisaks sellele on lingiväljal lingitud loendi järgmise andmepunkti aadress. Teatud sõlme juurde pääsemiseks kasutatavat aadressi tuntakse kui kursorit.
Teine oluline erinevus massiivi ja lingitud loendi vahel on see, et Array on kindla suurusega ja seda tuleb eelnevalt deklareerida, kuid seostatud nimekiri ei ole piiratud suuruse ja laiendamise ning lepingu täitmise ajal.
Võrdluskaart
Võrdluse alus | Array | Seotud loend |
---|---|---|
Põhiline | See on ühtne kogum kindlat arvu andmeühikuid. | See on tellitud komplekt, mis sisaldab muutuvat arvu andmeühikuid. |
Suurus | Täpsustatakse deklaratsiooni ajal. | Ei ole vaja täpsustada; kasvab ja väheneb täitmise ajal. |
Salvestamise jaotus | Elementide asukoht jaotatakse kompileerimise ajal. | Elemendi positsioon määratakse tööaja jooksul. |
Elementide järjekord | Salvestatakse järjest | Säilitatakse juhuslikult |
Elemendile juurdepääs | Otsene või juhuslik juurdepääs, st. Määrake massiivi indeks või alamindeks. | Seekordne juurdepääs, st Traverse, mis algab loendi esimesest sõlmedest kursoriga. |
Elemendi sisestamine ja kustutamine | Vajalik on aeglane suhteliselt nihe. | Lihtsam, kiirem ja tõhusam. |
Otsimine | Binaarne otsing ja lineaarne otsing | lineaarne otsing |
Vajalik mälu | vähem | Veel |
Mälu kasutamine | Ebaefektiivne | Tõhus |
Array mõiste
Massiivi määratletakse kindla arvu homogeensete elementide või andmeühikute kogumina. See tähendab, et massiiv võib sisaldada ainult ühte tüüpi andmeid, kas kõiki täisarvu, kõiki ujukoma numbreid või kõiki märke. Massiivi deklaratsioon on järgmine:
int a [10];
Kus int määratleb andmeliigi või tüüpi elementide massiivi. “A” on massiivi nimi ja ruuduklambrite sees määratud arv on elementide arv, mida massiiv saab salvestada, seda nimetatakse ka massi suuruseks või pikkuseks.
Vaatame mõningaid mõisteid, mida massiividega meeles pidada:
- Massiivi üksikuid elemente saab kasutada massiivi nime kirjeldamisega, millele järgneb indeks või alamindeks (määrates massiivi elemendi asukoha) ruuduklambrite sees. Näiteks, massiivi 5. elemendi allalaadimiseks peame kirjutama avalduse a [4].
- Igal juhul salvestatakse massiivi elemendid järjestikusesse mälukohta.
- Massiivi esimesel elemendil on indeks null [0]. See tähendab, et esimene ja viimane element määratakse vastavalt [0] ja a [9].
- Massiivi salvestatavate elementide arv, st massiivi suurus või pikkus on antud järgmise võrrandiga:
(ülemine piir-alumine piir) + 1
Ülaltoodud massiivi puhul oleks see (9-0) + 1 = 10. Kui 0 on massiivi alumine piir ja 9 on massiivi ülemine piir. - Vahendeid saab lugeda või kirjutada läbi silmus. Kui loeme ühemõõtmelist massiivi, vajab see lugemiseks ühte ahelat ja muud massiivi kirjutamiseks (näiteks):
a. Massiivi lugemiseks
(i = 0; i <= 9; i ++) jaoks
{scanf (“% d”, & a [i]); }
b. Massiivi kirjutamiseks
(i = 0; i <= 9; i ++) jaoks
{printf (“% d”, a [i]); } - 2-D massiivi puhul vajaks see kahte ahelat ja n-dimensiooniline massiiv vajaks n-ahelaid.
Massiividega tehtud toimingud on:
- Massiivi loomine
- Massiivi liikumine
- Uute elementide lisamine
- Nõutavate elementide kustutamine.
- Elemendi muutmine.
- Massiivide ühendamine
Näide
Järgnev programm illustreerib massiivi lugemist ja kirjutamist.
#include
#include
void main ()
{
int a[10], i;
printf("Enter the array");
for ( i= 0; i <= 9; i++)
{
scanf ( "%d", &a[ i ] ) ;
}
printf( "Enter the array" );
for (i = 0 ; i <= 9 ; i++)
{
printf ( "%d\n", a[ i ] ) ;
}
getch ();
}
Seotud nimekirja määratlus
Lingitud loend on mõningate üksteisega seotud elementide konkreetne loend. Selles näitab iga element järgmist elementi, mis kujutab loogilist tellimist. Iga elementi nimetatakse sõlmiks, millel on kaks osa.
INFO osa, mis salvestab informatsiooni ja POINTERi, mis viitab järgmisele elemendile. Nagu te teate aadressi salvestamiseks, on meil C-is ainulaadsed andmestruktuurid, mida nimetatakse osutajateks. Seega peab loendi teine väli olema kursoritüüp.
Seotud nimekirjade tüübid on üksikult seotud nimekiri, kahekordselt seotud loend, ümmarguse lingiga nimekiri, ümmargune topelt lingitud loend.
Lingitud loendis tehtud toimingud on järgmised:
- Loomine
- Liikumine
- Lisamine
- Kustutamine
- Otsimine
- Seondumine
- Ekraan
Näide
Järgmine osa näitab seotud nimekirja loomist:
struct node
{
int num;
stuct node *next;
}
start = NULL;
void create()
{
typedef struct node NODE;
NODE *p, *q;
char choice;
first = NULL;
do
{
p = (NODE *) malloc (sizeof (NODE));
printf ("Enter the data item\n");
scanf ("%d", & p -> num);
if (p == NULL)
{
q = start;
while (q -> next ! = NULL)
{ q = q -> next
}
p -> next = q -> next;
q -> = p;
}
else
{
p -> next = start;
start = p;
}
printf ("Do you want to continue (type y or n) ? \n");
scanf ("%c", &choice) ;
}
while ((choice == 'y') || (choice == 'Y'));
}
Peamised erinevused vahekaardi ja lingitud loendi vahel
- Massiiv on andmestruktuur, mis sisaldab sarnaste andmeelementide kogumit, samas kui lingitud loendit peetakse mitte-primitiivseks andmestruktuuriks, mis sisaldab kogumik järjestamata seotud elemente, mida nimetatakse sõlmedeks.
- Massiivis kuuluvad elemendid indeksitesse, st kui soovid neljandasse elementi siseneda, tuleb muutuja nimi oma indeksiga või asukohaga kirjutada ruuduklambris.
Seostunud nimekirjas peate siiski alustama peast ja töötama oma teed läbi, kuni jõuad neljanda elemendini. - Kuigi elementide massiivi juurdepääs on kiire, samas kui lingitud loend võtab aega lineaarselt, on see üsna aeglasem.
- Toimingud, nagu sisestamine ja kustutamine massiivides, tarbivad palju aega. Teisest küljest on nende toimingute toimimine seotud nimekirjades kiire.
- Vahendid on kindla suurusega. Seevastu on seotud nimekirjad dünaamilised ja paindlikud ning võivad laiendada ja lepinguid suurendada.
- Massiivis omistatakse mälu kompileerimise ajal, samas kui lingitud loendis eraldatakse see täitmise ajal või käivitamise ajal.
- Elemendid salvestatakse järjestikku massiivides, samas kui need on salvestatud juhuslikult linkitud nimekirjadesse.
- Mälu nõue on väiksem, kuna reaalsed andmed salvestatakse indeksisse massiivis. Vastupidiselt sellele on vaja rohkem mälu seotud loendites täiendavate järgmise ja eelmiste viiteandmete salvestamise tõttu.
- Lisaks on mälu kasutamine massiivis ebaefektiivne. Vastupidi, mälu kasutamine on massiivis tõhus.
Järeldus
Array- ja Linked-nimekirjad on andmestruktuuride tüübid, mis erinevad nende struktuuri, juurdepääsu ja manipuleerimise meetoditest, mälu nõuetest ja kasutamisest. Samuti on selle rakendamisel eriline eelis ja ebasoodsam olukord. Järelikult võib kumbagi kasutada vastavalt vajadusele.