Вторник, 26.11.2024, 15:12
Приветствую Вас Гость | RSS
Меню сайта
Категории раздела
База языка C# [3]
В данном разделе будут статьи по базовым понятиям языка C#
Основы языка С# [22]
Раздел продолжает рассматривать основы языка C#
Задачи [2]
примеры решения задач
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Поиск
Главная » Статьи » C# » Основы языка С#

Массивы. Ступенчатые массивы

В ступенчатых (или рваных) массивах количество элементов в разных строках может быть различным. В памяти ступенчатый массив хранится в виде массива массивов. Структура двумерного ступенчатого массива:

Объявление ступенчатого массива:
тип [][] имя_массива;
Например:

int[][] a;

Фактически мы объявили одномерный массив ссылок на целочисленные одномерные массивы. При таком описании потребуется не только выделять память под одномерный массив ссылок, но и под каждый из целочисленных одномерных массивов. Такое распределение памяти позволяет определять произвольную длину каждой строки массива (отсюда и произошло название массива – ступенчатый).
Например:

int[][] a = new int[3][]; // Создаем три строки

a[0] = new int[2]; // 0-ая строка ссылается на 2-х элементный одномерный массив

a[1] = new int[3]; // 1-ая строка ссылается на 3-х элементный одномерный массив

a[2] = new int[10]; // 2-ая строка ссылается на 10-х элементный одномерный массив

Другой способ выделения памяти:

int[][] a = { new int[2], new int[3], new int[10] };

Так как каждая строка ступенчатого массива фактически является одномерным массивом, то с каждой строкой можно работать как с экземпляром класса Array. Это является преимуществом ступенчатых массивов перед двумерными массивами.
Пример:

class Program

{

    static void Print(int[][] a)

    {

        for (int i = 0; i < a.Length; i++)

        {

            for (int j = 0; j < a[i].Length; j++)

            {

                Console.Write("{0} ", a[i][j]);

            }

            Console.WriteLine();

        }

    }

    static void Input(out int[][] a)

    {

        Console.Write("n= ");

        int n = int.Parse(Console.ReadLine());

        a = new int[n][];

        for (int i = 0; i < a.Length; i++)

        {

            Console.Write("введите количество элементов в {0} строке: ", i);

            int j = int.Parse(Console.ReadLine());

            a[i] = new int[j];

            for (j = 0; j < a[i].Length; j++)

            {

                Console.Write("a[{0}][{1}]= ", i, j);

                a[i][j] = int.Parse(Console.ReadLine());

            }

        }

    }

    static void Change(int[][] a)

    {

        for (int i = 0; i < a.Length; i++)

        {

            Array.Sort(a[i]);

        }

    }

    static void Main()

    {

        int[][] a;

        Input(out a);

        Console.WriteLine("Исходный массив:");

        Print(a);

        Change(a);

        Console.WriteLine("Измененный массив:");

        Print(a);

    }

}

Результат работы программы:
n=3
введите количество элементов в 0 строке: 2
a[0,0]=1
a[0,1]=3
введите количество элементов в 1 строке: 4
a[1,0]=7
a[1,1]=3
a[1,2]=2
a[1,3]=5
введите количество элементов в 2 строке: 3
a[2,0]=0
a[2,1]=5
a[2,2]=2
Исходный массив:
1 3
7 3 2 5
0 5 2
Измененный массив:
1 3
2 3 5 7
0 2 5

Категория: Основы языка С# | Добавил: solowey (18.01.2016)
Просмотров: 230 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт