De la inventarea computerelor, oamenii au folosit termenul ' Date ' pentru a se referi la Informații despre computer, fie transmise, fie stocate. Cu toate acestea, există date care există și în tipurile de ordine. Datele pot fi numere sau texte scrise pe o bucată de hârtie, sub formă de biți și octeți stocați în memoria dispozitivelor electronice sau fapte stocate în mintea unei persoane. Pe măsură ce lumea a început să se modernizeze, aceste date au devenit un aspect semnificativ al vieții de zi cu zi a fiecăruia și diverse implementări le-au permis să le stocheze diferit.
Date este o colecție de fapte și cifre sau un set de valori sau valori cu un format specific care se referă la un singur set de valori ale articolului. Elementele de date sunt apoi clasificate în sub-articole, care este grupul de articole care nu sunt cunoscute ca forma primară simplă a articolului.
Să luăm în considerare un exemplu în care numele unui angajat poate fi împărțit în trei sub-articole: primul, mijlocul și ultimul. Cu toate acestea, un ID atribuit unui angajat va fi, în general, considerat un singur articol.
Figura 1: Reprezentarea elementelor de date
În exemplul menționat mai sus, elementele precum ID, Vârsta, Sexul, Primul, Mijlocul, Ultimul, Strada, Localitatea etc., sunt elemente de date elementare. În schimb, numele și adresa sunt elemente de date de grup.
Ce este structura datelor?
Structură de date este o ramură a Informaticii. Studiul structurii datelor ne permite să înțelegem organizarea datelor și gestionarea fluxului de date pentru a crește eficiența oricărui proces sau program. Structura datelor este o modalitate specială de stocare și organizare a datelor în memoria computerului, astfel încât aceste date să poată fi recuperate cu ușurință și utilizate eficient în viitor, atunci când este necesar. Datele pot fi gestionate în diferite moduri, cum ar fi modelul logic sau matematic pentru o anumită organizare a datelor este cunoscut ca structură de date.
Sfera de aplicare a unui anumit model de date depinde de doi factori:
- În primul rând, trebuie să fie încărcat suficient în structură pentru a reflecta corelația definitivă a datelor cu un obiect din lumea reală.
- În al doilea rând, formarea ar trebui să fie atât de simplă încât să se poată adapta pentru a procesa datele în mod eficient ori de câte ori este necesar.
Câteva exemple de structuri de date sunt matrice, liste legate, stivă, coadă, arbori etc. Structurile de date sunt utilizate pe scară largă în aproape toate aspectele informaticii, adică, proiectarea compilatorului, sistemele de operare, grafică, inteligența artificială și multe altele.
Structurile de date sunt partea principală a multor algoritmi informatici, deoarece permit programatorilor să gestioneze datele într-un mod eficient. Joacă un rol crucial în îmbunătățirea performanței unui program sau software, deoarece obiectivul principal al software-ului este stocarea și recuperarea datelor utilizatorului cât mai repede posibil.
exemple de programe python
Terminologii de bază legate de structurile de date
Structurile de date sunt elementele de bază ale oricărui software sau program. Selectarea structurii de date potrivite pentru un program este o sarcină extrem de dificilă pentru un programator.
Următoarele sunt câteva terminologii fundamentale utilizate ori de câte ori sunt implicate structurile de date:
Atribute | ID | Nume | Gen | Denumirea funcției |
---|---|---|---|---|
Valori | 1234 | Stacey M. Hill | Femeie | Dezvoltator de software |
Entitățile cu atribute similare formează un Set de entitati . Fiecare atribut al unui set de entități are o gamă de valori, setul tuturor valorilor posibile care ar putea fi atribuite atributului specific.
Termenul „informații” este uneori utilizat pentru date cu atribute date de date semnificative sau prelucrate.
Înțelegerea necesității structurilor de date
Pe măsură ce aplicațiile devin din ce în ce mai complexe și cantitatea de date crește în fiecare zi, ceea ce poate duce la probleme cu căutarea datelor, viteza de procesare, gestionarea cererilor multiple și multe altele. Structurile de date acceptă diferite metode de organizare, gestionare și stocare eficientă a datelor. Cu ajutorul structurilor de date, putem parcurge cu ușurință elementele de date. Structurile de date oferă eficiență, reutilizare și abstracție.
De ce ar trebui să învățăm Structurile de date?
- Structurile de date și algoritmii sunt două dintre aspectele cheie ale informaticii.
- Structurile de date ne permit să organizăm și să stocăm date, în timp ce algoritmii ne permit să procesăm acele date în mod semnificativ.
- Învățarea structurilor de date și a algoritmilor ne va ajuta să devenim programatori mai buni.
- Vom putea scrie cod care este mai eficient și mai fiabil.
- De asemenea, vom putea rezolva problemele mai rapid și mai eficient.
Înțelegerea obiectivelor structurilor de date
Structurile de date satisfac două obiective complementare:
Înțelegerea unor caracteristici cheie ale structurilor de date
Unele dintre caracteristicile semnificative ale structurilor de date sunt:
număr aleator gen java
Clasificarea structurilor de date
O structură de date oferă un set structurat de variabile legate între ele în diferite moduri. Acesta formează baza unui instrument de programare care semnifică relația dintre elementele de date și permite programatorilor să proceseze datele în mod eficient.
Putem clasifica structurile de date în două categorii:
- Structura de date primitive
- Structura de date non-primitive
Figura următoare prezintă diferitele clasificări ale structurilor de date.
Figura 2: Clasificări ale structurilor de date
Structuri de date primitive
- Aceste structuri de date pot fi manipulate sau operate direct prin instrucțiuni la nivel de mașină.
- Tipuri de date de bază, cum ar fi Integer, Float, Caracter , și boolean intră sub Structurile de date primitive.
- Aceste tipuri de date sunt, de asemenea, numite Tipuri de date simple , deoarece conțin caractere care nu pot fi împărțite în continuare
Structuri de date non-primitive
- Aceste structuri de date nu pot fi manipulate sau operate direct de instrucțiuni la nivel de mașină.
- Accentul acestor structuri de date este pe formarea unui set de elemente de date care este fie omogen (același tip de date) sau eterogen (diferite tipuri de date).
- Pe baza structurii și aranjamentului datelor, putem împărți aceste structuri de date în două subcategorii -
- Structuri liniare de date
- Structuri de date neliniare
Structuri liniare de date
O structură de date care păstrează o conexiune liniară între elementele sale de date este cunoscută sub numele de Structură de date liniară. Aranjarea datelor se face liniar, unde fiecare element este format din succesori și predecesori, cu excepția primului și ultimului element de date. Cu toate acestea, nu este neapărat adevărat în cazul memoriei, deoarece aranjamentul poate să nu fie secvenţial.
Pe baza alocării memoriei, structurile liniare de date sunt clasificate în continuare în două tipuri:
The Matrice este cel mai bun exemplu al structurii de date statice, deoarece acestea au o dimensiune fixă, iar datele acesteia pot fi modificate ulterior.
Liste legate, stive , și Cozi sunt exemple comune de structuri de date dinamice
Tipuri de structuri liniare de date
Următoarea este lista structurilor liniare de date pe care le folosim în general:
1. Matrice
Un Matrice este o structură de date utilizată pentru a colecta mai multe elemente de date de același tip de date într-o singură variabilă. În loc să stocăm mai multe valori ale acelorași tipuri de date în nume de variabile separate, le-am putea stoca pe toate împreună într-o singură variabilă. Această afirmație nu implică faptul că va trebui să unim toate valorile aceluiași tip de date din orice program într-o singură matrice a acelui tip de date. Dar vor exista adesea momente în care unele variabile specifice ale acelorași tipuri de date sunt toate legate între ele într-un mod adecvat pentru o matrice.
Un Array este o listă de elemente în care fiecare element are un loc unic în listă. Elementele de date ale matricei au același nume de variabilă; cu toate acestea, fiecare poartă un număr de index diferit numit indice. Putem accesa orice element de date din listă cu ajutorul locației acestuia în listă. Astfel, caracteristica cheie a matricelor de înțeles este că datele sunt stocate în locații de memorie învecinate, făcând posibil ca utilizatorii să traverseze elementele de date ale matricei utilizând indecșii lor respectivi.
Figura 3. O matrice
Matricele pot fi clasificate în diferite tipuri:
Câteva aplicații ale matricei:
java convertește caracterul în șir
- Putem stoca o listă de elemente de date aparținând aceluiași tip de date.
- Array acționează ca o stocare auxiliară pentru alte structuri de date.
- Matricea ajută, de asemenea, la stocarea elementelor de date ale unui arbore binar cu număr fix.
- Array acționează și ca o stocare a matricelor.
2. Liste legate
A Lista legată este un alt exemplu de structură de date liniară utilizată pentru a stoca o colecție de elemente de date în mod dinamic. Elementele de date din această structură de date sunt reprezentate de Noduri, conectate folosind link-uri sau pointeri. Fiecare nod conține două câmpuri, câmpul de informații este format din datele reale, iar câmpul pointer este format din adresa nodurilor următoare din listă. Pointerul ultimului nod al listei legate constă dintr-un pointer nul, deoarece nu indică nimic. Spre deosebire de Arrays, utilizatorul poate ajusta dinamic dimensiunea unei liste conectate conform cerințelor.
Figura 4. O listă legată
Listele legate pot fi clasificate în diferite tipuri:
Câteva aplicații ale listelor conectate:
- Listele legate ne ajută să implementăm stive, cozi, arbori binari și grafice de dimensiuni predefinite.
- De asemenea, putem implementa funcția sistemului de operare pentru gestionarea dinamică a memoriei.
- Listele legate permit, de asemenea, implementarea polinomială pentru operații matematice.
- Putem folosi Circular Linked List pentru a implementa sisteme de operare sau funcții de aplicație care execută sarcinile Round Robin.
- Lista circulară legată este, de asemenea, utilă într-o prezentare de diapozitive în care un utilizator trebuie să se întoarcă la primul diapozitiv după ce este prezentat ultimul diapozitiv.
- Lista dublu legată este utilizată pentru a implementa butoane înainte și înapoi într-un browser pentru a deplasa înainte și înapoi în paginile deschise ale unui site web.
3. Stive
A Grămadă este o structură de date liniară care urmează LIFO Principiul (Last In, First Out) care permite operațiuni precum inserarea și ștergerea de la un capăt al stivei, adică Top. Stivele pot fi implementate cu ajutorul memoriei contigue, a unui Array, și a memoriei non-contigue, a unei Liste Linked. Exemple reale de stive sunt grămezi de cărți, pachete de cărți, grămezi de bani și multe altele.
Figura 5. Un exemplu real de Stack
Figura de mai sus reprezintă exemplul real al unei Stive în care operațiunile sunt efectuate doar de la un capăt, cum ar fi inserarea și îndepărtarea de cărți noi din partea de sus a Stivei. Implică faptul că inserarea și ștergerea în Stivă se pot face numai din partea de sus a Stivei. Putem accesa doar vârfurile Stivei în orice moment.
Operațiunile principale din stivă sunt următoarele:
Figura 6. O stivă
Câteva aplicații ale stivelor:
- Stiva este folosită ca o structură de stocare temporară pentru operațiuni recursive.
- Stack este, de asemenea, utilizat ca structură de stocare auxiliară pentru apeluri de funcții, operațiuni imbricate și funcții amânate/amânate.
- Putem gestiona apelurile de funcții folosind Stacks.
- Stivele sunt, de asemenea, utilizate pentru a evalua expresiile aritmetice în diferite limbaje de programare.
- Stivele sunt, de asemenea, utile în conversia expresiilor infixate în expresii postfix.
- Stivele ne permit să verificăm sintaxa expresiei în mediul de programare.
- Putem potrivi parantezele folosind Stacks.
- Stivele pot fi folosite pentru a inversa un șir.
- Stivele sunt utile în rezolvarea problemelor bazate pe backtracking.
- Putem folosi Stacks în căutarea în profunzime în parcurgerea graficului și a arborilor.
- Stivele sunt, de asemenea, folosite în funcțiile sistemului de operare.
- Stivele sunt, de asemenea, folosite în funcțiile UNDO și REDO într-o editare.
4. Cozi
A Coadă este o structură de date liniară similară cu o stivă, cu unele limitări privind inserarea și ștergerea elementelor. Introducerea unui element într-o coadă se face la un capăt, iar îndepărtarea se face la un alt capăt sau opus. Astfel, putem concluziona că structura datelor Queue urmează principiul FIFO (First In, First Out) pentru a manipula elementele de date. Implementarea cozilor se poate face folosind matrice, liste legate sau stive. Câteva exemple din viața reală de cozi sunt o linie la ghișeul de bilete, o scară rulantă, o spălătorie auto și multe altele.
Figura 7. Un exemplu real de coadă
împărțirea unui șir în c++
Imaginea de mai sus este o ilustrare reală a unui ghișeu de bilete de film care ne poate ajuta să înțelegem coada în care clientul care vine primul este întotdeauna servit primul. Clientul care sosește ultimul va fi, fără îndoială, servit ultimul. Ambele capete ale Cozii sunt deschise și pot executa diferite operații. Un alt exemplu este o linie de food court în care clientul este introdus din partea din spate, în timp ce clientul este îndepărtat din față după ce a furnizat serviciul pe care l-a solicitat.
Următoarele sunt operațiunile principale ale Cozii:
Figura 8. Coadă
Câteva aplicații ale cozilor:
- Cozile sunt utilizate în general în operația de căutare pe lățime în Graphs.
- Cozile sunt, de asemenea, folosite în operațiunile Job Scheduler ale sistemelor de operare, cum ar fi o coadă tampon de tastatură pentru a stoca tastele apăsate de utilizatori și o coadă tampon de imprimare pentru a stoca documentele tipărite de imprimantă.
- Cozile sunt responsabile pentru programarea CPU, programarea jobului și programarea discului.
- Cozile prioritare sunt utilizate în operațiunile de descărcare a fișierelor într-un browser.
- Cozile sunt, de asemenea, folosite pentru a transfera date între dispozitivele periferice și CPU.
- Cozile sunt, de asemenea, responsabile pentru gestionarea întreruperilor generate de aplicațiile utilizator pentru CPU.
Structuri de date neliniare
Structurile de date non-liniare sunt structuri de date în care elementele de date nu sunt aranjate în ordine secvențială. Aici, inserarea și eliminarea datelor nu sunt fezabile într-o manieră liniară. Există o relație ierarhică între elementele de date individuale.
Tipuri de structuri de date neliniare
Următoarea este lista structurilor de date neliniare pe care le folosim în general:
1. Copaci
Un arbore este o structură de date neliniară și o ierarhie care conține o colecție de noduri astfel încât fiecare nod al arborelui stochează o valoare și o listă de referințe la alte noduri („copii”).
Structura de date Tree este o metodă specializată de aranjare și colectare a datelor în computer pentru a fi utilizate mai eficient. Conține un nod central, noduri structurale și sub-noduri conectate prin margini. De asemenea, putem spune că structura de date a arborelui constă din rădăcini, ramuri și frunze conectate.
Figura 9. Un copac
Copacii pot fi clasificați în diferite tipuri:
Câteva aplicații ale arborilor:
- Arborii implementează structuri ierarhice în sisteme informatice, cum ar fi directoare și sisteme de fișiere.
- Arborii sunt, de asemenea, folosiți pentru a implementa structura de navigare a unui site web.
- Putem genera cod ca codul lui Huffman folosind Arbori.
- Arborii sunt, de asemenea, de ajutor în luarea deciziilor în aplicațiile de jocuri.
- Arborii sunt responsabili pentru implementarea cozilor de prioritate pentru funcțiile de planificare a sistemului de operare bazate pe priorități.
- Arborii sunt, de asemenea, responsabili pentru analizarea expresiilor și declarațiilor în compilatoarele diferitelor limbaje de programare.
- Putem folosi Trees pentru a stoca cheile de date pentru indexare pentru Sistemul de management al bazelor de date (DBMS).
- Spanning Trees ne permite să direcționăm deciziile în rețelele de calculatoare și comunicații.
- Arborii sunt utilizați și în algoritmul de găsire a căii implementat în aplicațiile de inteligență artificială (AI), robotică și jocuri video.
2. Grafice
Un grafic este un alt exemplu de structură de date neliniară care cuprinde un număr finit de noduri sau vârfuri și marginile care le conectează. Graficele sunt utilizate pentru a aborda problemele din lumea reală în care denotă zona cu probleme ca o rețea, cum ar fi rețelele sociale, rețelele de circuite și rețelele de telefonie. De exemplu, nodurile sau vârfurile unui grafic pot reprezenta un singur utilizator într-o rețea de telefonie, în timp ce marginile reprezintă legătura dintre ele prin telefon.
Structura de date Graph, G este considerată o structură matematică compusă dintr-un set de vârfuri, V și un set de muchii, E, după cum se arată mai jos:
G = (V,E)
Figura 10. Un grafic
Figura de mai sus reprezintă un grafic având șapte vârfuri A, B, C, D, E, F, G și zece muchii [A, B], [A, C], [B, C], [B, D], [B, E], [C, D], [D, E], [D, F], [E, F] și [E, G].
În funcție de poziția vârfurilor și a muchiilor, graficele pot fi clasificate în diferite tipuri:
Câteva aplicații ale graficelor:
- Graficele ne ajută să reprezentăm rute și rețele în aplicații de transport, călătorii și comunicații.
- Graficele sunt folosite pentru a afișa rute în GPS.
- Graficele ne ajută, de asemenea, să reprezentăm interconexiunile din rețelele sociale și din alte aplicații bazate pe rețea.
- Graficele sunt utilizate în aplicațiile de cartografiere.
- Graficele sunt responsabile pentru reprezentarea preferințelor utilizatorilor în aplicațiile de comerț electronic.
- Graficele sunt folosite și în rețelele de utilități pentru a identifica problemele puse corporațiilor locale sau municipale.
- De asemenea, graficele ajută la gestionarea utilizării și disponibilității resurselor într-o organizație.
- Graficele sunt, de asemenea, folosite pentru a realiza hărți de legături cu documente ale site-urilor web pentru a afișa conectivitatea dintre pagini prin hyperlinkuri.
- Graficele sunt, de asemenea, folosite în mișcările robotice și rețelele neuronale.
Operații de bază ale structurilor de date
În secțiunea următoare, vom discuta diferitele tipuri de operațiuni pe care le putem efectua pentru a manipula datele din fiecare structură de date:
- Timp de compilare
- Timp de rulare
De exemplu, cel malloc() funcția este utilizată în limbajul C pentru a crea o structură de date.
Înțelegerea tipului de date abstracte
Conform Institutul Național de Standarde și Tehnologie (NIST) , o structură de date este un aranjament de informații, în general în memorie, pentru o mai bună eficiență a algoritmului. Structurile de date includ liste legate, stive, cozi, arbori și dicționare. Ar putea fi, de asemenea, o entitate teoretică, cum ar fi numele și adresa unei persoane.
Din definiția menționată mai sus, putem concluziona că operațiunile din structura datelor includ:
leu în comparație cu un tigru
- Un nivel ridicat de abstracții, cum ar fi adăugarea sau ștergerea unui articol dintr-o listă.
- Căutarea și sortarea unui articol dintr-o listă.
- Accesarea articolului cu cea mai mare prioritate dintr-o listă.
Ori de câte ori structura de date efectuează astfel de operațiuni, este cunoscută ca un Tip de date abstracte (ADT) .
Îl putem defini ca un set de elemente de date împreună cu operațiunile asupra datelor. Termenul „rezumat” se referă la faptul că datele și operațiunile fundamentale definite pe acesta sunt studiate independent de implementarea lor. Include ce putem face cu datele, nu cum o putem face.
O implementare ADI conține o structură de stocare pentru a stoca elementele de date și algoritmii pentru funcționarea fundamentală. Toate structurile de date, cum ar fi o matrice, o listă legată, o coadă, o stivă etc., sunt exemple de ADT.
Înțelegerea avantajelor utilizării ADT-urilor
În lumea reală, programele evoluează ca o consecință a noilor constrângeri sau cerințe, astfel încât modificarea unui program necesită în general o modificare a uneia sau mai multor structuri de date. De exemplu, să presupunem că vrem să inserăm un câmp nou în înregistrarea unui angajat pentru a ține evidența mai multor detalii despre fiecare angajat. În acest caz, putem îmbunătăți eficiența programului prin înlocuirea unui Array cu o structură Linked. Într-o astfel de situație, rescrierea fiecărei proceduri care utilizează structura modificată este nepotrivită. Prin urmare, o alternativă mai bună este separarea unei structuri de date de informațiile sale de implementare. Acesta este principiul din spatele utilizării tipurilor de date abstracte (ADT).
Unele aplicații ale structurilor de date
Următoarele sunt câteva aplicații ale structurilor de date:
- Structurile de date ajută la organizarea datelor în memoria unui computer.
- Structurile de date ajută și la reprezentarea informațiilor în baze de date.
- Data Structures permite implementarea algoritmilor de căutare prin date (De exemplu, motorul de căutare).
- Putem folosi Structurile de date pentru a implementa algoritmi de manipulare a datelor (De exemplu, procesoare de text).
- De asemenea, putem implementa algoritmi de analiză a datelor folosind Structuri de date (De exemplu, mineri de date).
- Structurile de date acceptă algoritmi pentru a genera datele (De exemplu, un generator de numere aleatorii).
- Structurile de date acceptă, de asemenea, algoritmi de comprimare și decomprimare a datelor (De exemplu, un utilitar zip).
- De asemenea, putem folosi Structuri de date pentru a implementa algoritmi de criptare și decriptare a datelor (De exemplu, un sistem de securitate).
- Cu ajutorul Data Structures, putem construi software care poate gestiona fișiere și directoare (De exemplu, un manager de fișiere).
- De asemenea, putem dezvolta software care poate reda grafică folosind Structuri de date. (De exemplu, un browser web sau un software de randare 3D).
În afară de acestea, așa cum am menționat mai devreme, există multe alte aplicații ale structurilor de date care ne pot ajuta să construim orice software dorit.