Введение в 2-D массивы в C

Массив - это группа элементов с одинаковым (однородным) типом данных. Он также называется производным типом данных. Если мы рассмотрим примитивный тип данных и назначим значение, как показано ниже,

И теперь, если мы хотим сохранить новое значение в переменной a, новое значение заменяет старое значение. Используя одну примитивную переменную, мы можем хранить только одно значение за раз, мы не можем хранить несколько значений.

Для хранения более одного элемента в одной переменной, таких как оценки учащихся, идентификаторы сотрудников, номера мобильных телефонов с большим объемом данных, нам необходимо создать сотни уникальных переменных, что является очень сложной задачей. Вот почему концепция массива была введена.

Концепции в 2-D массивах в C

Мы можем определить массивы в

  • Одномерный
  • Дважды Dimensional

И так далее, вплоть до N-мерных, исходя из требований. Но здесь мы будем иметь дело с 2-мерными массивами. Как следует из названия, двумерные массивы могут представлять собой матричное представление данных, которые создаются для реализации структуры данных, похожей на реляционную базу данных, и могут храниться в табличных формах. Это обеспечивает простоту хранения объемных данных, которые могут быть переданы в любое количество функций в зависимости от требований. Доступ к данным в этих массивах можно получить через идентификаторы строк и столбцов.

Как мы можем определить и реализовать их? Где мы можем их использовать? Идем дальше, давайте разберемся с этими понятиями.

В C размерные массивы могут быть объявлены следующим образом:

Синтаксис

Таким же образом, мы можем объявить 2-D массив как:

Смысл вышеприведенного представления можно понимать как:

  1. Память, выделенная для переменной b, имеет тип данных int.
  2. Данные представляются в виде 2 строк и 3 столбцов.


К данным внутри массива можно получить доступ через представленное выше представление. В представлении двумерных массивов первая квадратная скобка представляет количество строк, а вторая - количество столбцов. Индексное представление массива для первого элемента всегда начинается с нуля и заканчивается размером 1. Переменная массива (здесь b) всегда содержит базовый адрес блока памяти и называется внутренней переменной указателя.

Так, например, если число строк равно 3, то индексное представление для доступа к данным в строках будет 0, 1 и 2. Та же логика применима и к индексам столбцов. Для вышеприведенного представления, чтобы получить данные 2- го ряда 3- го столбца, мы можем получить доступ с помощью b (1) (2).

Инициализация массивов

У нас есть два разных метода инициализации значений в C. Методы отличаются только синтаксически.

Ниже один из них.

Другой способ инициализации заключается в следующем:

Как правило, первый метод инициализации является предпочтительным, поскольку мы можем четко понимать и визуализировать строки и столбцы двумерных массивов в C.

Ниже приведен пример графического представления элементов и их адреса для массива b.

Элементы массива обычно хранятся в последовательных ячейках памяти на основе типа данных элементов.

Вставка элементов в двумерные массивы

Для вставки элементов в двумерные массивы нам необходимо вставить данные как в строки, так и в столбцы. Итак, для этого мы используем концепцию циклов. В приведенном выше процессе инициализации данных в массиве мы предварительно определили значения.

Здесь элементы могут быть динамически вставлены пользователем в соответствии с требованиями. Ниже приведен пример кода для вставки элементов.

#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
)

Как отмечено в коде:

  1. Сначала мы объявляем переменную массива и размеры массива с количеством строк и столбцов.
  2. Затем мы объявляем две переменные для перебора элементов в массиве.
  3. Затем для петли используются. Внешний цикл for предназначен для итерации строк, а внутренний цикл предназначен для столбцов.
  4. Функция Scanf используется для чтения данных при вводе, а затем для помещения значения, вставленного в эти позиции i и j.

В приведенном выше примере мы вставили данные в матрицу, имеющую 2 строки и 3 столбца. Вывод следующего может быть получен, как показано ниже:

Поскольку мы не использовали функцию printf для отображения выходных данных, написанная программа считывала только введенные пользователем значения. После написания функции печати (используя для циклов) вывод будет отображаться как:

Обновление элементов в двумерных массивах

Обновление элементов в массиве может быть выполнено либо путем указания конкретного элемента, подлежащего замене, либо путем определения позиции, в которой должна быть выполнена замена. Для обновления нам обычно требуются следующие данные.

  1. Элементы массива
  2. Позиция / элемент, где он должен быть вставлен
  3. Значение для вставки.

Для обновления данных в массиве с помощью сведений об элементе сначала нам нужно найти этот элемент в массиве, понять его положение, а затем заменить старый элемент новым элементом.

Ниже мы приводим два примера обновления элемента двумерного массива.

Во-первых, давайте рассмотрим пример, в котором положение обновляемого элемента уже известно.

#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
b(0)(2)=10;
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
printf("\n");
)
return 0;
)

В вышеприведенной программе выбран элемент в 1- й строке и 3- м столбце, и значение данных в этой позиции было обновлено.

Вывод для выше выглядит следующим образом:

Во втором примере мы собираемся показать, как положение элемента может динамически приниматься как введенное пользователем значение, и обновить значение элемента в этой конкретной позиции.

#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
printf("Enter the value of row and coulmn number :");
scanf("%d %d", &i, &j);
printf("Enter the number you want to update with: ");
scanf("%d", &num);
b(i)(j)=num;
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
printf("\n");
)
return 0;
)

Здесь мы использовали функцию scanf для считывания значения, заданного пользователем в соответствии с его выбором позиции элемента на основе номеров строк и столбцов.

Вывод следующий:

В качестве упражнения вы можете попробовать написать программу для обновления всей строки матрицы введенными пользователем значениями?

Теперь, как мы знаем, в двумерном массиве мы объявляем размер массива в самом начале. Мы знаем о размере массива, но что если пользователь задает случайный номер строки и столбца за пределами нашего размера массива?

Обратите внимание, что поскольку мы не написали ни одного условия if / else или блоков try / catch, вывод матрицы не изменится. Однако мы можем написать код с использованием вышеупомянутых условий для отображения ошибок в таких случаях.

Удаление элементов в двумерных массивах

После концепции вставки и обновления данных внутри массива, давайте теперь посмотрим, как мы можем удалить всю строку из массива.

Мы написали программу в простом формате, чтобы можно было легко понять концепцию различных операций в двумерном массиве.

#include
int main()
(
int b(2)(3), i, j, num, x;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
printf("Enter the value of row number :");
scanf("%d", &x);
for(i=0;i<2;i++)
(
if(i==x)
(
for(j=0;j<3;j++)
(
if((i+1)<2)
(
printf("\t%d", b(i+1)(j));
)
)
i++;)
else
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
)
printf("\n");
)
)

Следующие шаги:

  1. Взял значения массива динамически
  2. Попросил пользователя ввести номер (индекс) строки, которую нужно удалить.
  3. Используя для итерации цикла, мы сравниваем, совпадают ли номер строки и номер пользовательского ввода.
  4. Если они совпадают и номер строки меньше размера массива, мы печатаем следующую строку. Иначе, мы печатаем строку как есть.

Вывод следующий:

Что если я дам номер строки за пределами массива?

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

Как уже известно, мы можем даже объявить значения для номеров строк и столбцов динамически и написать программу соответствующим образом.

Разве это не выглядит простым и легким для изучения?

В качестве упражнения вы можете попробовать удалить конкретный элемент для 2-го массива сейчас?

Вывод

В этом разделе мы изучили основные операции над 2-мерными массивами. Эти двумерные массивы полезны в режиме реального времени с матричными операциями и многими математическими вычислениями.

Массивы могут даже использоваться для отображения календарей, размещения парковки, и мы можем даже сыграть в шахматы.

Многие другие структуры данных, такие как связанные списки, очереди, графики, деревья, должны использовать эту концепцию двумерных массивов в качестве основного требования при хранении и доступе к расположению различных элементов. Попробуйте решить основные операции с 2d массивами и получите удовольствие от изучения C.

Рекомендуемые статьи

Это руководство по 2-мерным массивам в C. Здесь мы обсуждаем введение, инициализацию массивов, вставку, обновление, удаление элементов в 2-мерных массивах. Вы также можете посмотреть следующие статьи, чтобы узнать больше -

  1. Массивы в R
  2. Преимущества массива
  3. Массивы в C ++
  4. Массивы в JavaScript
  5. Примеры массивов в C #
  6. Массивы в PHP