Мегаобучалка Главная | О нас | Обратная связь


Одномерные массивы и указатели



2016-09-16 391 Обсуждений (0)
Одномерные массивы и указатели 0.00 из 5.00 0 оценок




При определении массива ему выделяется память. После этого имя массива воспринимается как константный указатель того типа, к которому относятся элементы массива. Исключением является использование операции sizeof(имя_массива) и операции &имя_массива.

 

int a[100];

 

/*определение количества занимаемой массивом памяти, в нашем случае это 4*100=400 байт*/

int k=sizeof(a);

 

/*вычисление количества элементов массива*/

int n=sizeof(a)/sizeof(a[0]);

 

Результатом операции & является адрес нулевого элемента массива:

 

имя_массива==&имя_массива=&имя_массива[0]

 

Имя массива является указателем-константой, значением которой служит адрес первого элемента массива, следовательно, к нему применимы все правила адресной арифметики, связанной с указателями. Запись имя_массива[индекс] это выражение с двумя операндами: имя массива и индекс. Имя_массива – это указатель-константа, а индекс определяет смещение от начала массива. Используя указатели, обращение по индексу можно записать следующим образом: *(имя_массива+индекс).

 

for(int i=0;i<n;i++) //печать массива

cout<<*(a+i)<<" ";

/*к имени (адресу) массива добавляется константа i и полученное значение разыменовывается*/

 

Так как имя массива является константным указателем, то его невозможно изменить, следовательно, запись *(а++) будет ошибочной, а *(а+1) – нет.

Указатели можно использовать и при определении массивов:

 

int a[100]={1,2,3,4,5,6,7,8,9,10};

 

//поставили указатель на уже определенный массив

int* na=a;

 

/*выделили в динамической памяти место под массив из 100 элементов*/

int b = new int[100];

Перебор элементов массива

1) Элементы массива можно обрабатывать по одному элементу, двигаясь от начала массива к его концу (или в обратном направлении):
for(int i=0;i<n;i++) <обработка a[i]>

2) Элементы массива можно обрабатывать по два элемента, двигаясь с обеих сторон массива к его середине:
int i=0,j=n-1;
while (j<j){
<обработка a[I] и a[j]>;
i++;j++;}

3) Элементы массива можно обрабатывать по два элемента, двигаясь от начала к концу с шагом 1(т. е. обрабатываются пары элементов a[0]и a[1], a[1]и a[2] и т. д.)
for(i=0;i<n-1;i++)
<обработка a[i] и a[i+1]>

4) Элементы массива можно обрабатывать по два элемента, двигаясь от начала к концу с шагом 2(т. е. обрабатываются пары элементов a[0]и a[1], a[2]и a[3] и т. д.)
i=1;
while(i<n){
<обработка a[i] и a[i+1]>
i:=i+2;}

Классы задач по обработке массивов

1) К задачам 1 класса относятся задачи, в которых выполняется однотипная обработка всех или указанных элементов массива. Решение таких задач сводится к установлению того, как обрабатывается каждый элемент массива или указанные элементы, затем подбирается подходящая схема перебора, в которую вставляются операторы обработки элементов массива. Примером такой задачи является нахождение среднего арифметического элементов массива.

2) К задачам 2 класса относятся задачи, в которых изменяется порядок следования элементов массива. Обмен элементов внутри массива выполняется с использованием вспомогательной переменной:

R=a[I];a[I]=a[J]; a[J]=R;//обмен a[I]и a[J]элементов массива.

3) К задачам 3 класса относятся задачи, в которых выполняется обработка нескольких массивов или подмассивов одного массива. Массивы могут обрабатываться по одной схеме – синхронная обработка или по разным схемам – асинхронная обработка массивов.

4) К задачам 4 класса относятся задачи, в которых требуется отыскать первый элемент массива, совпадающий с заданным значением – поисковые задачи в массиве.

Сортировка массивов

Сортировка – это процесс перегруппировки заданного множества объектов в некотором установленном порядке.

Сортировка с помощью включения

Элементы массива делятся на уже готовую последовательность и исходную. При каждом шаге, начиная с I=2, из исходной последовательности извлекается i-ый элемент и вставляется на нужное место готовой последовательности, затем i увеличивается на 1 и т. д.

готовая исходная

В процессе поиска нужного места осуществляются пересылки элементов больше выбранного на одну позицию вправо, т. е. выбранный элемент сравнивают с очередным элементом отсортированной части, начиная с j:=i-1. Если выбранный элемент больше a[i], то его включают в отсортированную часть, в противном случае a[j] сдвигают на одну позицию, а выбранный элемент сравнивают со следующим элементом отсортированной последовательности. Процесс поиска подходящего места заканчивается при двух различных условиях:

- если найден элемент a[j]>a[i];

- достигнут левый конец готовой последовательности.

 

int i,j,x;

for(i=1;i<n;i++)

{

x=a[i];//запомнили элемент, который будем вставлять

j=i-1;

while(x<a[j]&&j>=0)//поиск подходящего места

{

a[j+1]=a[j];//сдвиг вправо

j--;

}

a[j+1]=x;//вставка элемента

}

Сортировка методом простого выбора

Выбирается минимальный элемент массива и меняется местами с первым элементом массива. Затем процесс повторяется с оставшимися элементами и т. д.

  мин      

 

int i,min,n_min,j;

for(i=0;i<n-1;i++)

{

min=a[i];n_min=i;//поиск минимального

for(j=i+1;j<n;j++)

if(a[j]<min)

{

min=a[j];

n_min=j;

}

a[n_min]=a[i];//обмен

a[i]=min;

}

 



2016-09-16 391 Обсуждений (0)
Одномерные массивы и указатели 0.00 из 5.00 0 оценок









Обсуждение в статье: Одномерные массивы и указатели

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (391)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)