Программирование arrow .NET Framework arrow Анализ структур данных. Часть 2: Очередь, стек и хеш-таблица

Анализ структур данных. Часть 2: Очередь, стек и хеш-таблица

Оглавление

Эта статья - вторая часть серии из 6 статей о структурах данных в .NET Framework - посвящена трем наиболее часто рассматриваемым структурам данных: очереди, стеку и хеш-таблице. Как мы увидим, очередь и стек делаются с помощью ArrayList-а, обеспечивая место для хранения переменного числа объектов, накладывая, однако, при этом ограничения на порядок доступа к элементам. Хеш-таблица - это структура данных, похожая на массив, но с большей гибкостью индексирования элементов.

Часть 2: Очередь, стек и хеш-таблица

Обзор: Эта статья - вторая часть серии из 6 статей о структурах данных в .NET Framework - посвящена трем наиболее часто рассматриваемым структурам данных: очереди, стеку и хеш-таблице. Как мы увидим, очередь и стек делаются с помощью ArrayList-а, обеспечивая место для хранения переменного числа объектов, накладывая, однако, при этом ограничения на порядок доступа к элементам. Хеш-таблица - это структура данных, похожая на массив, но с большей гибкостью индексирования элементов. В то время как в массиве элементы индексируются с помощью порядковой величины, элементы хеш-таблицы могут быть индексированы посредством любого объекта.

Введение

В Части 1: Подробный анализ структур данных, мы остановились на определении понятия структур данных, методах оценки их эффективности, а также на том, как эти соображения влияют на выбор той или иной структуры данных для конкретного алгоритма. Помимо изучения базовых вещей о структурах данных и анализе их эффективности, мы также рассмотрели наиболее часто используемую структуру данных - массив.

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

Два недостатка массивов - это их однородность и то, что размер массива должен быть явно задан. Для устранения этого недостатка библиотека классов .NET Framework содержит в себе такую структуру данных как ArrayList, которая представляет собой совокупность элементов разного типа. Причем его размер увеличивается автоматически при необходимости. Как мы уже обсудили в предыдущей статье, реализация ArrayList в .NET Framework использует массив типа object. Каждый вызов метода Add() ArrayList-а проверяет, достаточен ли размер внутреннего массива object-ов для хранения дополнительных элементов и если нет, то размер этого внутреннего массива автоматически удваивается.

Во второй части серии мы продолжим наше знакомство с массивоподобными структурами данных и, прежде всего, рассмотрим очередь (queue) и стек (stack). Подобно ArrayList-у, эти две структуры данных содержат совокупность элементов разного типа (heterogeneous data) в непрерывной области памяти (contiguous block). Однако, как очередь, так и стек, налагают ограничения на порядок доступа к данным.

После рассмотрения очереди и стека, мы посвятим остальное время, разбираясь в механизмах работы хеш-таблицы. Хеш-таблица, иногда называемая также ассоциативным массивом (associative array), хранит совокупность элементов различного типа. Однако, элементы хеш-таблицы могут быть проиндексированы с помощью объектов произвольного типа (например, строками), а не только порядковым индексом.


 
« Предыдущая статья   Следующая статья »


  • .NET Framework, Оптимизация сериализации в .NET
    Приводятся код и методы, позволяющие разработчикам оптимизировать сериализацию данных....
  • .NET Framework, Плавающая точка в .NET - часть 1: принципы и форматы
    Данная статья представит основные принципы арифметических операций с плавающей точкой: числовые форматы, точности и достоверность, погрешности округления. Также в статью включено обсуждение типов плавающей запятой в .NET....
  • .NET Framework, JIT-оптимизации
    Компилятор .NET Just-In-Time Compiler (JIT) считается многими одним из основных преимуществ производительности CLR по сравнению с JVM и другими управляемыми средами, которые используют двоичный код, скомпилированный компилятором JIT. ...
  • .NET Framework, Инъекции CLR: замена методов во время выполнения
    Многие из нас, наверняка, были заинтересованы в том, как работает универсальный язык CLR. Одной из наиболее интересных вещей является динамический компилятор JIT (Just In Time Compiler). Мы рассмотрим то, как JIT компилирует MSIL и создадим утилиту, которая позволяет программным образом заменить любой метод (JIT) другим во время выполнения. Мы также создадим отладочную утилиту, которая прехватывает JIT-вызовы и выводит в консоль информацию о диагноcnbrt....
  • .NET Framework, Оптимизация запуска приложений .NET
    Ждать, пока приложение запустится, неприятно для многих пользователей, поэтому ускорение запуска приложений клиентов может значительно улучшить первое впечатление от вашей работы. И так как скорость запуска имеет значение, следует знать факторы, которые на нее влияют, чтобы избежать распространенных ошибок....
  • .NET Framework, Создание компилятора языка для .NET Framework
    Эксперты по компиляторам являются знаменитостями в компьютерном мире. Я видел, как Андерс Хейльсберг (Anders Hejlsberg) представлял презентацию на конференции разработчиков Professional Developers Conference и когда он сошел со сцены, его встретила целая орда мужчин и женщин, просящих поставить автограф на книгу, или сняться на фотографии вместе с ними. Люди, посвящающие свое время изучению и пониманию всех тонкостей лямбда-выражений, систем типов и языков сборки, кажутся своего рода носителями ...
  • .NET Framework, Маршалинг данных между управляемым и неуправляемым кодом
    Посмотрим правде в глаза: нет в мире совершенства. Мало кто при разработке использует только управляемый код. А между тем, тяжким грузом лежат устаревшие неуправляемые приложения, с которыми приходится мириться. Есть ли способ интегрировать проекты, в которых задействован как управляемый, так и неуправляемый код? Какой вид принимает этот способ: вызов неуправляемого кода из управляемого приложения или вызов управляемого кода из неуправляемого приложения?...
  • .NET Framework, IronPython как движок для макросов в .NET приложениях
    Подозреваю, многие из вас задумывались — как можно в .NET приложение добавить поддержку макросов — чтобы можно было расширять возможности программы без ее перекомпиляции и предоставить сторонним разработчикам возможность легко и просто получить доступ к API вашего приложения? В статье рассмотрено, как в качестве основы для выполнения макросов использовать IronPython — реализацию языка Python на платформе .NET....