Зубчатые массивы в C++

Зубчатый массив в C++ Программирование и разработка

Зубчатый массив — это массив массивов, в котором массивы элементов могут быть разных размеров, в терминах 2D-массива для каждой строки у нас может быть переменное количество столбцов. Эти типы массивов также известны как зубчатые массивы.

Зубчатый массив в C++

Зубчатый массив в C++

Пример:

arr[3][] = 1 2 3 4        // arr[0][4] : 1st row have 4 columns
           5 6            // arr[1][2] : 2nd row have 2 columns
           7 8 9          // arr[2][3] : 3rd row have 3 columns

Методы создания зубчатого массива

Jagged Array может быть реализован на C++ двумя способами:

  1. Использование статического массива указателей
  2. Использование динамических 2D-массивов

1. Использование статического массива указателей

  • Создать ’n’ числовые 1D-массивы (строка1, строка2, строка3, ….. и т. д.), где n — количество строк, размер каждого массива строк будет равен количеству столбцов, т. е. количеству элементов в каждом массиве строк покажет нет. столбцов в этой конкретной строке.
  • Создайте одномерный массив указателей, сохраняя базовый адрес каждого массива строк.
  • Создайте еще один одномерный массив Sizes[], в котором хранится размер каждого массива строк (это помогает при повторении каждого элемента).

Ниже приведена реализация вышеуказанного метода:

С++

// C++ Program to implement  Jagged Array
// 1st way: static arrays
#include <iostream>
using namespace std;
 
int main()
{
    // create 3 row arrays having different sizes
    // ( no ofcolumns)
    int row1[] = { 1, 2, 3, 4 };
    int row2[] = { 5, 6 };
    int row3[] = { 7, 8, 9 };
 
    // storing base address of each row array
    int* jagged[] = { row1, row2, row3 };
 
    int sizes[] = { 4, 2, 3 };
 
    cout << "elements in matrix form as follow" << endl;
    for (int i = 0; i < 3; i++) {
 
        // getting current(ith) row
        int* ptr = jagged[i];
 
        for (int j = 0; j < sizes[i]; j++) {
            // for ith row having sizes[i] no. of
            // columns
 
            cout << *(ptr + j) << " ";
            // *ptr have base address
            // adding j means access jth
            // element for particular(ith) row
        }
        cout << endl;
    }
 
    return 0;
}

Выход

elements in matrix form as follow
1 2 3 4 
5 6 
7 8 9

2. Использование динамических 2D-массивов

  • Создайте переменные row, col, хранящие no. рядов и нет. столбцов.
  • Создайте динамический массив строк arr (массив указателей), который может хранить «строку» с количеством адресов.
  • Сохраните размер в другом одномерном массиве Sizes[] (размер числа или строк), чтобы сохранить номер. столбцов для каждого элемента строки в массиве строк. (Это помогает при повторении каждого столбца для каждой строки).
  • Создайте массив динамических столбцов для каждого элемента строки с размером: размеры[i]
  • Теперь каждый элемент строки в массиве строк имеет базовый адрес каждого массива столбцов.
Читайте также:  Создание калькулятора на C++

Ниже приведена реализация вышеуказанного метода:

С++

// C++ Program to implement Jagged array
// 2nd way: Dynamic 2D array
#include <iostream>
using namespace std;
 
int main()
{
    // system("cls");
 
    int row, col;
    row = 3;
 
    // Create Row Array- dynamic array of pointers
    int** arr = new int*[row];
    int sizes[] = { 4, 2, 3 };
    // int *sizes= new int[row];
    // if taking row as input
 
    // no of columns for each row as input from user
    for (int i = 0; i < row; i++) {
        /*
        cin>>col;        //if col is taken as input
        / sizes[i]=col;
        // store each col number in size ( if row and col
        // are taken as input)
        */
 
        *(arr + i) = new int[sizes[i]];
        // creating column of sizes[i] for each row
    }
 
    // input from user
    int num = 1;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < sizes[i]; j++) {
            // cin>>arr[i][j];    //if user want to input
            arr[i][j] = num++;
        }
    }
 
    cout << "elements in matrix form as follow" << endl;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < sizes[i]; j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
 
    return 0;
}

Выход

elements in matrix form as follow
1 2 3 4 
5 6 
7 8 9

Оцените статью
bestprogrammer.ru
Добавить комментарий