Масив (програмиране)

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене
Емблема за пояснителна страница Вижте пояснителната страница за други значения на Масив.

В областта на компютърните науки масивът (на английски: array) е една от най-простите структури от данни: масивът е колекция от елементи (стойности или променливи), които могат да бъдат достъпвани директно чрез индекс. В различните езици за програмиране масивите са реализирани по различни начини.

моля, въведете индекс

Масиви в C/C++[редактиране | edit source]

В езиците за програмиране C и C++, масивът е група от променливи които са от един и същи тип данни, имат един и същи размер, разположени са последователно в паметта и съществува указател, който сочи към първия елемент от масива.

/* Създаване на масиви: */
 
/* Вариант 1: създаване на незадължително инициализиран масив. */
int arr[6]; // Създава масив от 6 елемента, всеки от които е цяло число.
 
/* Вариант 2: създаване на инициализиран масив. */
int arr[] = {0, 1, 2, 3, 4, 5}; // Създава масив от 6 елемента.
 
/* Задаване на стойности на елементи на масива: */
arr[0] = 5; // Присвоява на нулевия елемент от масива числото 5.
 
/* Следните два реда са еквивалентни. */
arr[2] = 100; // Присвоява на втория елемент числото 100.
*(arr + 2) = 100; // Присвоява на втория елемент числото 100.
 
/* Прочитане на елемент от масива: */
int tmp; //  Създава променливата tmp от тип int (цяло число).
tmp = arr[0]; // Задава на променливата tmp стойността на нулевия елемент на масива arr.
tmp = arr[2]; // Задава на tmp стойността на втория елемент на масива arr.
 
/* Адресна аритметика: */
int *tmp; // Създава променливата tmp, чийто тип е int*, т.е. указател към цяло число.
tmp = arr; // Задава на променливата tmp адреса на нулевия елемент на масива arr.
tmp = &arr[0]; // Задава на променливата tmp адреса на нулевия елемент. (Няма разлика с горния ред.)
tmp = &arr[2]; // Задава на tmp адреса на втория елемент.
tmp = arr + 2; // Задава адреса на втория елемент. Еквивалент на горния ред, защото:
               // &(arr[2]) ---> &(*(arr + 2)) --> arr + 2;

Масиви в PHP[редактиране | edit source]

В езика за програмиране PHP, масивът е променлива, която съдържа множество от елементи. Масивите могат да бъдат 2 вида — обикновени и асоциативни. При обикновените масиви за обръщане към елемент се използва индекс (поредно число) на елемента. При асоциативните масиви за обръщане към елемент се използва текстов низ.

$arrr = array('c', 'php', 'javascript', 'python'); // Създава обикновен масив с 4 елемента
$arrr[0] = 2; // Присвоява на нулевия елемент от масива числото 2
$arra = array('c' => true, 'php' => 'yes', 'python' => 1); // Създава асоциативен масив с 3 елемента
$arra['python'] = 4; // Присвоява на елемента "python" стойност 4

Масиви в JavaScript[редактиране | edit source]

В езика за програмиране JavaScript, масивът е обект. Той има конструктор и методи. За обръщане към елементите от обекта могат да се използват индекси или текстови низове.

var arr = new Array(17, 3, 5, 2, 13, 11, 7); // Създава обект от тип Array (масив)
arr.sort(function (a, b) { // Подрежда (сортира) елементите в масива
  return a - b;
});
var narr = new Array('yes', 1, 'no', 0); // Създава друг обект от тип Array (масив)
narr.length; // Взима дължината на новия масив (броя на елементите в него)

Масиви могат да бъдат създавани и посредством литерала за масив:

var literalArray = [5,2,3,8];
literalArray.pop(); //8
literalArray.push(1);
console.log(literalArray); //[5,2,3,1]

Масиви в Python[редактиране | edit source]

В езика за програмиране Python, масивите са 2 вида — tuple и list. Разликата между тях е, че един tuple не може да бъде променен — докато съществува, неговите елементи остават такива, каквито са били при създаването му. При list елементите могат да бъдат променяни.

mytuple = ("hello", "world", 1) # Създава tuple
mylist = [3+2j, "wikipedia", "is", "cool"] # Създава list
mylist = mylist[:3] + ["very"] + mylist[3:] # Добавя елемент към list

Масиви в Perl[редактиране | edit source]

В езика за програмиране Perl, масивът е променлива, която съдържа множество от елементи. Масивите могат да бъдат 2 вида — обикновени и асоциативни. При обикновените масиви за обръщане към елемент се използва индекс (поредно число) на елемента. При асоциативните масиви за обръщане към елемент се използва текстов низ. При обръщане към елемент от масив, пред името на масива се поставя знакът $ (долар). При обръщане към обикновен масив пред името на масива се поставя знакът @ (маймунско А). При обръщане към асоциативен масив пред името на масива се поставя знакът % (процент).

@natural = (1, 2, 3, 4, 5, 6, 7, 8, 9); // Създава обикновен масив
@natural; // Обръща се към масива
$natural[0]; // Връща 1
%browsers = ("konqueror", "khtml", "opera", "Presto", "firefox", "Gecko", "safari", "WebKit");
$browsers{"opera"}; // Връща "Presto"

Масиви в C#[редактиране | edit source]

Схема на масив в C#

Масивите в езика С# представляват съвкупност от няколко еднотипни променливи. Те се наричат елементи на масива.

Декларират се по следния начин:

type[] arrayName;

Характеристики на масивите[редактиране | edit source]

  • Масивът може да бъде едномерен, многомерен или масив от масиви.
  • Базирани са на нулево индексиране – това означава, че в масив с N елемента, първият елемент ще е с индекс нула, а последният с индекс N-1.
  • Елементите на масива могат да бъдат от всякакъв тип, включително то тип масив.
  • Стойността по подразбиране на елементите от числен тип е нула, за референтните типове е null, а за булевите типове е false. При масив от масиви елементите са от референтен тип и по подразбиране са null.
  • Редът на елементите и дължината на масива са фиксирани.

Следващите примери демонстрират как се създават едномерен, многомерен и масив от масиви (jagged array).

int[] newArray;
	// Деклариране на едномерен масив
        int[] array1 = new int[5];
 
        // Деклариране на масив и едновременно задаване на стойности на елементите му
        int[] array2 = new int[] { 1, 3, 5, 7, 9 };
 
        // Друг запис на горното
        int[] array3 = { 1, 2, 3, 4, 5, 6 };
 
        // Деклариране на двумерен масив
        int[,] multiDimensionalArray1 = new int[2, 3];
 
        // Деклариране и задаване на стойности
        int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };
 
        // Деклариране на масив от масиви
        int[][] jaggedArray = new int[6][];

При деклариране на масив след типа на променливите трябва да бъдат поставени квадратните скоби ([]), а не идентификатора (името) на масива.

Многомерни масиви[редактиране | edit source]

За двумерен масив елементите с индекси i, j биха имали адрес B + c.i + d.j, където коефициентите c и d са стъпките на увеличение съответно на реда и колоната.

По-общо, в k-мерен масив, адресът на елемент с индекси i1, i2, …, ik e:

B + c1 · i1 + c2 · i2 + … + ck · ik.

Например: int a[3][2];

Това означава, че масивът е от тип int и има 3 реда и 2 колони. В него можем да съхраним 6 елемента, подредени линейно, започвайки от първия ред. Горепосоченият масив би бил съхранен в следния ред: a11, a12, a13, a21, a22, a23.

Тази формула изисква само k умножения и k събирания за който и да е масив, който може да се събере в паметта. Освен това, ако коефициентът е точна степен на 2, умноженията могат да се заместят с Побитови измествания.

Коефициентите ck трябва да бъдат такива, че всеки валиден индекс да води до адреса на определен елемент.

Ако минималната позволена стойност за всеки индекс е 0, то B е адресът на елемента, на който всички индекси са 0. Както при едномерните масиви, индексите на елементите могат да бъдат променяни, като се промени основния адрес B. Следователно, ако двумерен масив има редове и колони с индекси от 1 до 10 и от 1 до 20 съответно, то тогава заменяйки B с B + c1 - − 3 c1 ще преномерираме индексите на елементите на съответно от 0 до 9 и от 4 до 23. Възползвайки се от това свойство, някои езици за програмиране (като FORTRAN 77) задават индексите на масивите да започват от 1, както е традиционно математически, докато други езици (като Fortran 90, Pascal и Algol) позволяват на потребителя да избира минималната стойност на всеки индекс.

Обработване на масиви[редактиране | edit source]

  • с for цикъл — използва се когато се работи с индекса на елементите и не е задължително да се обхожда всеки един от първия до последния елемент.
  • с foreach цикъл — използва се когато не е необходима употребата на индекс, а елементите се обхождат един по един. С тази операция елементите не могат да бъдат променяни, а само прочитани.

Масивите като обекти[редактиране | edit source]

В езика C# масивите са всъщност обекти. System.Array е базовият тип на всички видове масиви и неговите характеристики могат да бъдат прилагани. Пример за това може да бъде намирането на дължината на масива с използване на свойството Length.

Преоразмеряеми масиви[редактиране | edit source]

Това са масиви, които могат да се променят динамично, като се добавят или премахват елементи от тях. Синтаксисът е List<T> - където Т е типа данни, които ще се съдържат. Основното им предимство е, че няма нужда да знаем предварително дължината на масива. Първоначално новосъздадения списък има 0 елемента. Основни методи и свойства:

  •  :Add (T element) – добавя елемент на края
  •  :Remove (element) – премахва елемента
  •  :Count – връща текущата дължина на списъка

Източници[редактиране | edit source]