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

Недавно я принял участие в упражнении по технической оценке, и в основном все интервью было сосредоточено на некоторых основных концепциях программирования, таких как масштабируемость, оптимизация производительности, алгоритмы и структуры данных. Да, структуры данных, я почти не ответил правильно на вопросы, заданные во время интервью о структурах данных. Почему, потому что тогда меня это не интересовало. Например, ArrayList. Почему мне все еще нужно знать, как работает arrayList, если Java уже проделала большую часть работы. Но я понял, что для того, чтобы писать хорошие алгоритмы, вам действительно нужно хорошее знание структур данных. Эти знания позволяют вашему алгоритму более эффективно манипулировать данными.

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

Прежде всего, вы хотите иметь теоретическое понимание предмета, и это можно назвать декларативным этапом.

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

Я расскажу о некоторых из этих структур данных.

Массивы

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

int [] mFruits = новый int [5];

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

Массивы могут быть одномерными, например, выше, многомерными (двух или трех).

Почему важен массив?

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

Операции, которые могут быть выполнены с массивом, включают:

  1. Добавление в массив с помощью push ()
  2. Удаление из массива с помощью pop ();

NB: Вы также можете узнать об адресах массивов.

Реальные приложения Array

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

Другие примеры реальных приложений массива можно увидеть на шахматных / шашечных досках, страницах книг и т. Д.

Стеки

Это также может означать LIFO (последний пришел, первый ушел). Вы знаете, когда вы составляете список книг, самая верхняя книга оказывается первой, которую вы берете.

Операции, которые можно выполнять со стеками, включают:

  1. Добавление в стек (push ())
  2. Удаление из стека (pop ());
  3. просмотр самого верхнего элемента, который является последним элементом в массиве (peek ());

Реальные приложения Stack.

Очень простой пример этого - кнопка Назад в веб-браузере, которая объясняется в этом вопросе Quora. Другие приложения включают;

я. перемена слова.

II. Механизм «отмены» в текстовых редакторах.

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

Очередь

Очередь похожа на стек, за исключением того, что в ней используется FIFO («первым пришел - первым вышел»). Практический пример очереди - это очередь для регистрации на мероприятие.

Операции, которые можно выполнять с помощью очереди, включают:

  1. enqueue (ключ), что означает добавление в коллекцию

2. dequeue (ключ), что означает удаление из коллекции.

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

Связанный список

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

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

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

Операции, которые могут быть выполнены в связанном списке, включают:

  1. PushFront (ключ) - добавление в начало LinkedList
  2. key TopFront () - вернуть передний элемент
  3. popFRont () - удалить передний элемент
  4. pushback - добавить в спину

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

Реальные приложения связанного списка

  1. Цепочка, в которой каждый элемент соединен вместе
  2. Поезд, в котором вагоны связаны друг с другом.

Деревья

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

Вот математическая задача с использованием древовидной структуры данных:

Важные термины, которые нужно знать о деревьях, включают: Узлы, дети, родители, братья и сестры, корни, потомки, предки, листья.

Реальные приложения Tree

  1. Его можно использовать для географической иерархии.
  2. Это также может помочь в анализе кода.

Более подробные реальные приложения можно увидеть здесь.

После хорошего понимания теоретической части структур данных необходимо практиковать эти концепции, выполнив некоторые задачи кодирования, потому что «Практика делает постоянным». Этот этап практики можно назвать ассоциативным этапом. На практике я использую Hackerank, который мне очень помог в процессе обучения.

Чтобы узнать больше о структурах данных, вы можете посмотреть это видео на YouTube, в котором объясняются основы структур данных.

Я надеюсь, что я сослужил вам хорошую службу при написании этого сообщения. Если у вас есть какие-либо отзывы об этом сообщении, вы можете прокомментировать его или написать мне по адресу [email protected].