I programmering kalles et sammenhengende lagringsområde som inneholder en serie elementer av samme type, elementene i matrisen matrise,formasjon,vektor, [ 2 ] Fra et logisk synspunkt kan en matrise sees på som et sett med elementer arrangert i en rad (eller rader og kolonner hvis den hadde to dimensjoner).
I prinsippet kan alle arrays anses å være av én dimensjon, hoveddimensjonen, men elementene i den raden kan i seg selv være arrays (en prosess som kan være rekursiv ), noe som lar oss snakke om eksistensen av arrays flerdimensjonale, selv om de enkleste å forestille seg er de med én, to og tre dimensjoner.
Disse datastrukturene er egnet for situasjoner der datatilgang er tilfeldig og uforutsigbar. På den annen side, hvis elementene kan bestilles og sekvensiell tilgang skal brukes, ville det være mer hensiktsmessig å bruke en liste , siden denne strukturen lett kan endre størrelse under kjøringen av et program, sistnevnte er en dynamisk struktur (da den ikke har en definert størrelse).
Hver vektor består av et visst antall elementer, noe som gjør den til en statisk struktur. Hvert element er referert av posisjonen det opptar i vektoren. Disse posisjonene kalles indeks og er alltid korrelative. Det er tre måter å indeksere elementene i en matrise på:
Representasjonen av et element i en vektor gjøres vanligvis ved hjelp av vektoridentifikatoren etterfulgt av indeksen mellom firkantede parenteser, parenteser eller parenteser:
Notasjon | eksempler |
---|---|
vektor[ indeks_1 , indeks_2 ..., indeks_N ] | Lua , Perl , etc |
vektor[ indeks_0 ][ indeks_1 ]...[ indeks_N-1 ] | C , C++ , PHP , Java , etc |
vektor( indeks_1 , indeks_2 ..., indeks_N ) | Grunnleggende , MATLAB |
Selv om de mange ganger er i pseudokode og i matematikkbøker, er de representert som bokstaver ledsaget av et numerisk underskrift som indikerer posisjonen du vil ha tilgang til. For eksempel for en vektor " A ":
(endimensjonal vektor)Måten å få tilgang til elementene i matrisen på er direkte ; dette betyr at det ønskede elementet er hentet fra dets indeks, og du trenger ikke å lete etter det element for element (i tilfelle en liste, for å nå for eksempel det tredje elementet, må du få tilgang til forrige to eller lagre en peker eller peker som gir rask tilgang til det elementet).
For å jobbe med vektorer mange ganger er det nødvendig å krysse dem. Dette gjøres ved hjelp av løkker . Følgende kilde skrevet på C-språket viser en typisk algoritme for å krysse en vektor ' ' og bruke en funksjon ' ' på hver av vektorens komponenter:
int i = 0 ; int lengde = 99 ; // lengde på vektoren Eks. 99 int V [ lengde ]; while ( i < lengde ) //Eks. med While { //Noen operasjon utføres på vektoren i den i-te posisjonen f ( V [ i ] ); //Øk indeksen for neste trinn i = i + 1 ; // Kan også skrives som i++; eller i+= 1; }Vanligvis har en vektor en fast mengde minne allokert til seg, selv om avhengig av typen vektor og programmeringsspråk, kan en vektor ha en variabel mengde data. I dette tilfellet kalles de dynamiske vektorer , i motsetning til vektorer med en fast mengde minne som er allokert til dem, kalles statiske vektorer . [ 3 ]
Bruk av dynamiske vektorer krever riktig dynamisk minnebehandling . Feil bruk av dynamiske vektorer, eller bedre sagt, dårlig håndtering av dynamisk minne, kan føre til en minnelekkasje . Ved bruk av dynamiske vektorer vil det alltid være nødvendig å frigjøre minnet som brukes når det ikke lenger skal brukes.
Mer moderne språk og språk på høyere nivå har en mekanisme som kalles en søppeloppsamler (som tilfellet er med Java ) som lar programmet bestemme om det skal frigjøre plass basert på om det skal brukes i fremtiden .objekt.
Som identifikator for vektoren, en konstant peker som inneholder adressen til begynnelsen av vektoren (vektor[0], første element)
int main ( ugyldig ) { int i , v [ 5 ]; // v[5] er en 5-komponent vektor (nullbasert indeksering) for ( i = 0 ; i < 5 ; i ++ ) { * ( v + i ) = 0 ; // Tilordne en verdi på adressen (vektor + ((indeks * størrelsen på (int) antall byte offset fra base.) printf ( "%d \n " , * ( v + i )); printf ( " \n " ); // Opprett en ny linje } returner 0 ; }Eksempelet ovenfor er laget for C++-språket. I C, for å lage dynamiske matriser, må du bruke malloc- og realloc- instruksjonene for å reservere minne dynamisk (se bibliotek stdlib.h ), og gratisfunksjonen for å frigjøre minnet som brukes.
Resultat:
0 | 1 | to | 3 | 4 |
---|---|---|---|---|
0 | to | 4 | 6 | 8 |
Resultatet av begge eksemplene er samme vektor.
I Basic , Java og andre språk er det mulig å erklære flerdimensjonale arrays, forstå dem som en vektor med x-dimensjon. I disse tilfellene er antallet elementer i vektoren det resulterende produktet av hver dimensjon.
For eksempel har vektoren v(4,1) 10 elementer og beregnes som følger: (0-4) * (0-1). Elementene i den første dimensjonen av vektoren inneholder 5 elementer som strekker seg fra '0' til '4' og den andre dimensjonen har 2 elementer som spenner fra '0' til '1'. Elementene vil få tilgang til som følger:
element 1: (0,0) element 2: (0,1) element 3: (1.0) ... element 8: (3.1) element 9: (4.0) element 10: (4.1)