Новости сайта

Программа на turbo pascal динамические структуры данных

Краткая информация:
Имя файлаИмя файла: Программа на turbo pascal динамические структуры данных
ПопулярностьРейтинг: Звезда
ПользовательАвтор: m-crol
ДатаОбновлено: Позавчера
КатегорияКатегория: Свежее
ИнформацияПросмотров: 639
Количество скачиванийЗагрузок: 237
БлагодарностиСказали спасибо: artyo-kuchero, gumachka, lifegifted, afonya-na
Проверено антивирусамиПроверено: Norton Internet SecurityKaspersky Anti-VirusDr. WebESET NOD32

Динамические структуры данных (списки, очереди, стеки, деревья) — Turbo Pascal

В дальнейшем прошу не спрашивать в этой теме вопросы, не относящиеся к теме «Динамически структуры данных». На вопрос отвечу просто, т.к. для данной задачи (построить меню и организовать с ним работу) считаю что структура case подходить лучше всего.

И так, а теперь по делу. Рассмотрим работу со связным списком . Для начала разберёмся что же это такое:


Подробнее о программе на turbo pascal динамические структуры данных

В информатике, cвя́зный спи́сок — структура данных, состоящая из узлов, каждый из которых содержит как собственные данные, так и одну или две ссылки («связки») на следующее и/или предыдущее поле. Принципиальным преимуществом перед массивом является структурная гибкость: порядок элементов связного списка может не совпадать с порядком расположения элементов данных в памяти компьютера, а порядок обхода списка всегда явно задаётся его внутренними связями.

вообщем читаем вот эти две страницы: Википедия ссылка 1 Википедия ссылка 2 Это очень удобная структура, при помощи неё можно работать с Хеш таблицами, разряженными матрицами, да в общем то применений можно найти много, я очень уважаю списки, т.к. если правильно организовать с ними работу, то это просто приятно. Опять же не буду много говорить, если что-то Вам не понятно, то спрашивайте, перейду сразу к программе реализованной мной, для работы со списками, пройдёмся по процедурам: 1) procedure AddElem(var spis1:List;znach1:TInf); 2) procedure Print(spis1:List); 3) Procedure FreeStek(spis1:List); 4) Function SearchElemZnach(spis1:List;znach1:TInf):List; 5) Procedure DelElem(var spis1:List;tmp:List); 6) procedure DelElemZnach(var Spis1:List;znach1:TInf); 7) Procedure DelElemPos(var spis1:List;posi:integer); 8) procedure SortBublInf(nach:list); 9) procedure SortBublLink(nach:List); Все действия у этих процедур и функций аналогичны тем, которые я описывал для работы со стеком, ведь по сути разница между этими структурами, лишь в методе доступа к ним и добавлении элементов. (в стеке добавляется на вершину, т.е. перед «первым» элементом, а в списке после последнего элемента). Вот и сам код:

lexus_ilia, можно спросить вопрос по динамическим структурам данных, а именно про очередь, надеюсь она таковой является. Над очередью мы только можем производить операции добавления элемента в конец очереди, и удаления элемента из начала очереди, а просмотреть очередь нельзя получается? А поиск еще можно реализовать в очереди, или тоже не получится, так как

dean0572 . вопрос хороший, следует на него ответить. Пока отойдём от каких-либо структур. Для начала вспомним массивы. Все мы представляем массивы для себя по-разному, чаще всего, если массив одномерный, в виде строки элементов, если двумерный, в виде матрицы, если трёхмерный — в виде куба. Я уже начинал говорить про этот вопрос:

Но я решил писать программу так, как будто у нас «видно» весь стек и мы можем просматривать любой элемент в любое время (если будет не понятен этот момент, пишите в теме, я расскажу подробнее что поменяется тогда).

И понимаю что следует раскрыть ответ.

Самое важное для чего Вы используете очередь, если это какая-то банковская программа и программа у Вас реализована через класс, то конечно же ни в коем случае не следует писать метод (так называются функции и структуры у классов) который выводил бы нам всю очередь. Так как я пишу программы для ознакомления со структурами, то я отхожу от некоторых принципов и реализую процедуры сортировки (с изменением данных, адресов), вывода данных (Print) — которые немного «искривляют» принципы доступа в той или иной структуре. Но я всегда придерживаюсь концепции структуры, т.е. если я пишу про стек, то элементы добавляются именно так, как это следует делать в стеке, если очередь, то так, как следует это делать для очереди, если бинарные деревья, то так, как это следует делать для них.

Вопрос как бы с подвохом. Когда я раньше ещё сдавал программы по «Динамическим структуре данных» преподавателям, то спрашивал у них, а для чего в задании про стеки написано: «Написать процедуру вывода стека?Ведь это означает, что мне придётся: «Брать элемент начиная с вершины, выводить его значение и удалять» — и так сделать пока не будет виден весь стек!» — на что получал вполне ясный ответ:»Мы изучаем структуры, выполняйте задание.». Т. к. я хочу иметь чистую совесть, то я представляю себе стек, как прозрачную колбу, в которую закидываются элементы и,если мы начнём смотреть через программами с верхнего элемента, двигаясь вниз, то мы просмотрим все элементы, не вытягивая их из колбы. Очередь я представляю как живую очередь в магазине, ведь «наблюдатель» (указатель) всегда сможет пройтись с самого конца очереди в самое начало заглянув в каждого человека (элемент).

Из всего вышесказанного мной, следует: — Т.к. программы пишутся исключительно для ознакомления со структурами, то способ доступа к структуре расширяется, т.е. мы оставляем основу (LIFO, FIFO. ), но разрешаем и просмотр элементов, обращение к любого элементу с структурой его «перестановки» с другим элементом.

02.06.2010, 00:43 [ТС] Динамические структуры данных (списки, очереди, стеки, деревья)

программе на turbo pascal динамические структуры данных

И вот пришло время добавить работу с деревьями . Код любезно предоставлен пользователем lera8 (ссылка на страницу пользователя lera8 ) Начнём с того, что же такое дерево. И как ни странно все Вы имеете представление о том, что такое дерево: давайте представим себе генеалогическое дерево (все знаю, что это такое), так вот деревья в программировании имеет по своей сути очень и очень схожее строение: есть какой-то корень (обычно он располагается в самом верху, т.е. дерево «растёт» вниз) и у него есть потомки, а у тех потомков свои потомки и т.д. В нашем случае рассматривается так называемое «Двоичное дерево поиска», ссылка на Википедию. Вы спросите почему? А потому, что оно очень часто используется для решения очень широкого круга задач, чаще всего для поиска и сортировки (при больших объёмах сортируемой информации, очень даже неплохие результаты показывает).

И так, опишем функции, которые реализованы: 1) procedure AddToTree (var Tree:PNode;x:integer); — добавление элемента в дерево 2) function Search(Tree:PNode;x:integer):PNode; — функция поиска в дереве 3) procedure Lkp(Tree:PNode); — обход дерева по принципу «Левле поддерево, корень, правое поддерево» 4) procedure DeleteTree(var Tree1:PNode ) — процедура удаления дерева

А вот и сам код:

Постановка задачи Реализовать хранилище стеков, с операциями добавления, поиска, удаления стеков, а так же со всеми стандартными операциями внутри отдельного стека. Среда программирования Turbo Pascal 7.1.

1.Реализовать стек в ООП со всеми стандартными операциями: добавление элемента, взятие вершины, проверки на пустоту и заполнение, вывод содержимого стека на экран.

2.Реализовать список, в каждом узле которого содержится стек.

3.В основной программе реализовать меню, для удобства работы.

Структура данных – это множество элементов данных и связей между ними. Они разделяются на статические и динамические. Статические формируются в памяти одномоментно до начала работы со структурами и во время своего существования не меняют свои размеры и место положения в памяти. Примерами являются массивы и записи. Динамические структуры данных могут менять свои размеры и расположение, их состав может постоянно меняться в ходе работы с программой. Они в свою очередь делятся на линейные (списки, стеки, очереди) и нелинейные (деревья, графы). В линейных структурах элементы идут один за другим, в нелинейных – возможно ветвление.

Рассмотрим подробнее линейные структуры данных, а именно списки . Списки бывают односвязными, двусвязными, циклическими. В каждом элементе односвязного списка содержится указатель на следующий элемент, двусвязного – на следующий и предыдущий, в циклическом последний элемент содержит указатель на первый. В списке в любой момент времени можно обратиться к любому его элементу. Для ряда задач произвольность доступа является недопустимой, для этого введено понятие дисциплины обработки данных (стек, очередь, дек). Дисциплина определяет к какому элементу и каким образом пользователь может обратиться в данный момент времени.

Стек (англ. stack — стопка) — структура данных с методом доступа к элементам LIFO (англ. Last In — First Out, «последним пришел — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно взять верхнюю.

Стек – это дисциплина обработки данных, имеющая линейную структуру, доступ в которой разрешается только к последнему добавленному элементу( вершине стека). Стек работает по принципу LIFO (Last In, First Out. Последний вошёл, первый вышел ). Простым примером использования стека может послужить ситуация, когда мы просматриваем множество данных и составляем список особых данных, которые должны обрабатываться позднее. Когда первоначальное множество обработано, мы возвращаемся к этому списку и выполняем обработку, удаляя элементы, пока наш список не станет пустым. Например, рекурсивные функции, пока не обработан последний вызов, все предыдущие вызовы находятся в своеобразном стеке. Стек активно используется в архитектуре компьютера, в ней преобладает стековая адресация.

Рассмотрим основные функции обработки стека:

Push – добавление в вершину стека, в процедуру передаётся добавляемое значение. Pop – взятие элемента из вершины стека, возвращает содержимое вершины IsEmpty – проверка на пустоту, возвращает True или False. IsFull – проверка на заполнение, максимальное число элементов в стеке определяет константа MaxStack . возвращает True или False. Top – указатель на вершину стека

Рассмотрим структуру узла стека:

В ходе работы были закреплены навыки работы с модулями, с динамическими структурами данных в объектно ориентированном программировании. Была написана программа для работы со стеками с интуитивно понятным для пользователя интерфейсом.

Утилита на turbo pascal динамические структуры данных

Случайные статьи: