[Программирование, Изучение языков] Hi Programming Language: linked list

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
09-Окт-2020 03:32

Продолжаемконструировать язык 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
===========

Похожие новости: Теги для поиска: #_programmirovanie (Программирование), #_izuchenie_jazykov (Изучение языков), #_hi_programming_language, #_hi_language, #_linkedlist, #_programmirovanie (
Программирование
)
, #_izuchenie_jazykov (
Изучение языков
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 23-Ноя 00:52
Часовой пояс: UTC + 5