[Программирование, Изучение языков] Hi Programming Language: linked list
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Продолжаемконструировать язык Hi. Сегодня рассмотрим встроенную реализацию связного списка (linked list).
Связный список >
SPL
Связный список представляет цепь элементов — узлов, каждый из которых, кроме последнего, связан, то есть имеет ссылку на один следующий элемент (однонаправленный список) и для двунаправленного списка каждый элемент, кроме первого, связан с одним предыдущим элементом.
Не все промышленные языки имеют встроенную поддержку связного списка как структуры данных. Впрочем, его нетрудно реализовать самостоятельно как класс или структуру. Для комфортной работы с релевантными алгоритмами мы добавим встроенные двунаправленные связные списки уже в базовое определение языка Hi.
Для начала создадим экземпляр нашего экспериментального списка:
VAR list = <"I", "will", "be">
В примере выше для трех узлов автоматически создаются двунаправленные ссылки.
Связанный непустой список в языке Hi всегда имеет один узел, который является текущим или «активным». По умолчанию это последний добавленный элемент, то есть сейчас это «be». Проверим это:
PRINT list.current # печатает "be"
Добавим в наш список еще два элемента:
list.insert "back", "!" # теперь list включает элементы: "I", "will", "be", "back", "!"
Встроенный метод insert добавляет новые элементы сразу после активного узла, автоматически выстраивает новые связи и делает текущим последний добавленный элемент (добавить и сделать первым новый узел списка можно методом insertFirst).
Удаление осуществляется похожим образом для текущего элемента:
list.remove 1 # list включает элементы: "I", "will", "be", "back"
Впрочем, можно сразу удалить и несколько элементов, для этого нужно предварительно установить указатель на первый удаляемый узел:
VAR secList = list
secList.prev 2
secList.remove 2 # secList сейчас включает элементы: "I", "back"
При этом узел, предыдущий перед удаляемым, становится текущим. Если удаляется первый элемент списка, то текущим становится новый первый элемент.
Можно заменить текущий узел на другой, просто присвоив элементу новое значение:
secList.сurrent = "smile" # secList включает элементы: "smile ", "back"
Удалить все узлы, то есть сделать список пустым можно так:
secList = <>
Переходить на первый и последний узел удобно следующим образом:
list.first
LET last = list.last # одновременно мы присваиваем новой константе значение активного элемента
Таким образом можно достаточно легко осуществлять разнообразные операции со списком:
PRINT list # печатает "I", "will", "be", "back"
list.first
list.next
list.insert "not"
LET be = list
===========
Источник:
habr.com
===========
Похожие новости:
- [Программирование, .NET, Управление продуктом, Управление персоналом, Читальный зал] Меня перевезли в другую страну и через две недели выставили на мороз — потому что передумали нанимать
- [Программирование, C++, Биографии гиков, Интервью] Тридцать лет С++. Интервью с Бьерном Страуструпом (перевод)
- [C++, Алгоритмы, Программирование] Под капотом сортировок в STL
- [Open source, Программирование, C++] What's new in rotor v0.09
- [Prolog, Бизнес-модели, Программирование, Семантика] Проектируем мульти-парадигменный язык программирования. Часть 2 — Сравнение построения моделей в PL/SQL, LINQ и GraphQL
- [Программирование, OpenStreetMap, C, Геоинформационные сервисы] Создание тайлов из растровых карт
- [Настройка Linux, Программирование, Разработка под Linux] Знакомимся с семафорами в Linux (перевод)
- [Исследования и прогнозы в IT, Микросервисы, Программирование, Распределённые системы] Обработка распределенных транзакций в микросервисной архитектуре (перевод)
- [JavaScript, ReactJS, Программирование, Разработка веб-сайтов] Мифы о useEffect (перевод)
- [Программирование, Изучение языков] Hi Programming Language: начинаем конструировать
Теги для поиска: #_programmirovanie (Программирование), #_izuchenie_jazykov (Изучение языков), #_hi_programming_language, #_hi_language, #_linkedlist, #_programmirovanie (
Программирование
), #_izuchenie_jazykov (
Изучение языков
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:52
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Продолжаемконструировать язык Hi. Сегодня рассмотрим встроенную реализацию связного списка (linked list). Связный список >SPLСвязный список представляет цепь элементов — узлов, каждый из которых, кроме последнего, связан, то есть имеет ссылку на один следующий элемент (однонаправленный список) и для двунаправленного списка каждый элемент, кроме первого, связан с одним предыдущим элементом.
Не все промышленные языки имеют встроенную поддержку связного списка как структуры данных. Впрочем, его нетрудно реализовать самостоятельно как класс или структуру. Для комфортной работы с релевантными алгоритмами мы добавим встроенные двунаправленные связные списки уже в базовое определение языка Hi. Для начала создадим экземпляр нашего экспериментального списка: VAR list = <"I", "will", "be">
В примере выше для трех узлов автоматически создаются двунаправленные ссылки. Связанный непустой список в языке Hi всегда имеет один узел, который является текущим или «активным». По умолчанию это последний добавленный элемент, то есть сейчас это «be». Проверим это: PRINT list.current # печатает "be"
Добавим в наш список еще два элемента: list.insert "back", "!" # теперь list включает элементы: "I", "will", "be", "back", "!"
Встроенный метод insert добавляет новые элементы сразу после активного узла, автоматически выстраивает новые связи и делает текущим последний добавленный элемент (добавить и сделать первым новый узел списка можно методом insertFirst). Удаление осуществляется похожим образом для текущего элемента: list.remove 1 # list включает элементы: "I", "will", "be", "back"
Впрочем, можно сразу удалить и несколько элементов, для этого нужно предварительно установить указатель на первый удаляемый узел: VAR secList = list
secList.prev 2 secList.remove 2 # secList сейчас включает элементы: "I", "back" При этом узел, предыдущий перед удаляемым, становится текущим. Если удаляется первый элемент списка, то текущим становится новый первый элемент. Можно заменить текущий узел на другой, просто присвоив элементу новое значение: secList.сurrent = "smile" # secList включает элементы: "smile ", "back"
Удалить все узлы, то есть сделать список пустым можно так: secList = <>
Переходить на первый и последний узел удобно следующим образом: list.first
LET last = list.last # одновременно мы присваиваем новой константе значение активного элемента Таким образом можно достаточно легко осуществлять разнообразные операции со списком: PRINT list # печатает "I", "will", "be", "back"
list.first list.next list.insert "not" LET be = list =========== Источник: habr.com =========== Похожие новости:
Программирование ), #_izuchenie_jazykov ( Изучение языков ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:52
Часовой пояс: UTC + 5