Пилим псевдокоды основных структур данных
Пилим псевдокоды основных структур данных
Ничего хитрого, пишем связанный список, бинарное дерево, хэш-таблицу
- Лис [Вежливый]
- Сообщения: 582
- Зарегистрирован: 08.10.18 13:32
Re: Пилим псевдокоды основных структур данных
Собеседник (топикстартер) сообщил о том, какие работы ведутся.
"Пилим" в этом контексте является синонимом словам "программируем"/"разрабатываем".
Это действительно может быть продолжительными работами. Например у Кнута на эти темы написано немало текста. В соседней теме собеседник сообщает о своей позиции по отношению к обучению (считает его нужным). Я согласен с тем, что создать обучающие тексты на русском языке это нужная задача.
"Пилим" в этом контексте является синонимом словам "программируем"/"разрабатываем".
Это действительно может быть продолжительными работами. Например у Кнута на эти темы написано немало текста. В соседней теме собеседник сообщает о своей позиции по отношению к обучению (считает его нужным). Я согласен с тем, что создать обучающие тексты на русском языке это нужная задача.
Re: Пилим псевдокоды основных структур данных
Кто такой Кнут?
- Лис [Вежливый]
- Сообщения: 582
- Зарегистрирован: 08.10.18 13:32
Re: Пилим псевдокоды основных структур данных
Код: Выделить всё
//======================================================================
// Значимые и ссылчные конструкции.
// Ссылочные это всегда классы.
// Значимые - это состав или примитивные типы, на вроде целое, чипт.
// чипт - число с плавющей точкой.
// Значимые могут быть помещены в куче, тогда следует используют ссылки.
// Узел* - ссылочный тип на Узел.
//======================================================================
включи Системные
обозначения БинарноеДерево // обозначения - это логическое выделение, а модуль это физическое.
// Когда мы говорим о модулях, мы имеем ввиду какой-то файл, здесь же речь не о файлах.
класс Дерево
закрой: // - инструкция указывающая доступно ли экземпляру данное поля для вызова.
Узел* корень
// После знака ":" указывается тип возвращаемого значения.
Сверь(целое число, Узел* узел): логик
если (число < узел.значение)
верни истина
верни ложь
открой:
Дерево(целое число):
корень = дай Узел(число) // - инструкция дай делает запрос памяти для размещении в куче.
Добавь(целое число):
Узел* текущий = корень
пока (истина)
если (Сверь(число, текущий) == ложь && текущий.левый != 0)
текущий = текущий.левый
иначе (Сверь(число, текущий) == истина && текущий.правый != 0)
текущий = текущий.правый
то
стоп
если (Сверь(число, текущий) == ложь)
текущий.левый = дай Узел(число)
то
текущий.правый = дай Узел(число)
// Данная конструкция объявление состава указывает, что его имя находится в рамка обозначения Дерево.
состав Дерево.Узел
Узел* левый, правый, остов
целое значение
Узел(целое число):
значение = число
Начни(строка арг): целое
Дерево числовое = дай Дерево(4)
числовое.Добавь(7)
числовое.Добавь(3)
числовое.Добавь(11)
Консоль.Пиши("Привет друзья!")
верни 0
Последний раз редактировалось Тихонович 14.12.23 22:09, всего редактировалось 1 раз.
Re: Пилим псевдокоды основных структур данных
Спасибо Лис!
Re: Пилим псевдокоды основных структур данных
Кот моего воображаемого языка, алгоритм пузырьковой сортировки.
Какие есть замечания, предложения?
Какие есть замечания, предложения?
Код: Выделить всё
подключи Системные
обозначения Сортировки
Выведи(целое[] массив):
пройди массив как целое число
Консоль.Пиши(число)
Смени(целое[] массив, целое одно, целое другое):
целое времянка = массив[одно]
массив[одно] = массив[другое]
массив[другое] = времянка
/// Пузырьковая сортировка.
Выстрой(целое[] массив, целое всего) : целое[]
целое проход, место
проход = 0
пока(проход < всего - 1)
место = 0
пока(место < всего - проход - 1)
если (массив[место] > массив[место + 1])
Смени(массив, место, место + 1)
место++
проход++
верни массив
Стань(строка[] аргументы): целое
целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
Выведи(массив)
массив = Выстрой(массив, 10)
Выведи(массив)
верни 0
Re: Пилим псевдокоды основных структур данных
Сортировка перемешиванием
Код: Выделить всё
подключи Системные
обозначения Сортировки
Смени(целое[] массив, целое одно, целое другое):
целое мена = массив[одно]
массив[одно] = массив[другое]
массив[другое] = мена
/// Сортировка перемешиванием.
Выстрой(целое[] массив, целое всего) : целое[]
целое лево, право, метка, место
метка = всего - 1
лево = 0, право = метка
иди
место = лево
до(место < право, место++)
если (массив[место] > массив[место + 1])
Смени(массив, место, место + 1)
метка = место
право = метка
место = право
до(место > лево, место--)
если (массив[место] < массив[место - 1])
Смени(массив, место, место - 1)
метка = место
лево = метка
пока(лево < право)
верни массив
Стань(строка[] аргументы): целое
целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
массив = Выстрой(массив, 10)
верни 0
Re: Пилим псевдокоды основных структур данных
Сортировка вставками
Код: Выделить всё
/// Сортировка вставками.
Выстрой(целое[] массив, целое всего) : целое[]
целое проход, метка, место
проход = 1
пока(проход < всего)
метка = массив[проход]
место = проход - 1
до(место >= 0 и массив[место] > метка, место--)
массив[место + 1] = массив[место]
массив[место + 1] = метка
проход++
верни массив
Стань(строка[] аргументы): целое
целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
массив = Выстрой(массив, 10)
верни 0
Re: Пилим псевдокоды основных структур данных
Гномья сортировака
Код: Выделить всё
Смени(целое[] массив, целое одно, целое другое):
целое мена = массив[одно]
массив[одно] = массив[другое]
массив[другое] = мена
// Гномья сортировака
Выстрой(целое[] массив, целое всего) : целое[]
целое метка, место
место = 1, метка = 2
пока(место < всего)
если(массив[место - 1] > массив[место])
место = метка
метка = метка + 1
то
Смени(массив, место - 1, место)
место = место - 1
если(место == 0)
место = метка
метка = метка + 1
верни массив
Стань(строка[] аргументы): целое
целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
массив = Выстрой(массив, 10)
верни 0
Re: Пилим псевдокоды основных структур данных
Сортировка слиянием
Код: Выделить всё
// Сортировка слиянием
Выстрой(целое[] верх, целое[] низ, целое лево, целое право) : целое[]
если (лево == право)
верх[лево] = низ[лево]
верни верх
целое[] итог, л_часть, п_часть
целое место, центр, дан_л, дан_п
центр = лево + (право - лево) / 2
л_часть = Выстрой(верх, низ, лево, центр)
п_часть = Выстрой(верх, низ, центр + 1, право)
если (л_часть == верх)
итог = верх
то
итог = низ
// Слияние стройных половин
место = лево, дан_л = лево, дан_п = центр + 1
до(место <= право, место++)
если(дан_л <= центр и дан_п <= право)
если(л_часть[дан_л] < п_часть[дан_п])
итог[место] = л_часть[дан_л]
дан_л++
то
итог[место] = п_часть[дан_п]
дан_п++
иначе(дан_л < центр)
итог[место] = л_часть[дан_л]
дан_л++
то
итог[место] = п_часть[дан_п]
дан_п++
верни итог
Стань(строка[] аргументы): целое
целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
целое[10] буфер
массив = Выстрой(массив, буфер, 0, 9)
верни 0
Re: Пилим псевдокоды основных структур данных
Если у Вас есть очередной проект ЯП с русским синтаксисом, то для таких проектов есть специальный форум:
https://вече.программирование-по-русски ... m.php?f=13
Лучше заведите тему про свой проект в этом форуме (заодно поглядите на то, что сделано до Вас и подумаете, целесообразно ли начинать ещё один проект).
https://вече.программирование-по-русски ... m.php?f=13
Лучше заведите тему про свой проект в этом форуме (заодно поглядите на то, что сделано до Вас и подумаете, целесообразно ли начинать ещё один проект).