Зубчатый массив — это массив массивов, в котором массивы элементов могут быть разных размеров, в терминах 2D-массива для каждой строки у нас может быть переменное количество столбцов. Эти типы массивов также известны как зубчатые массивы.
Зубчатый массив в 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++ двумя способами:
- Использование статического массива указателей
- Использование динамических 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++ 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