Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 65461
Модуль Forms 65220
Пример работы с... 64726
ТЕХНОЛОГИИ ДОСТ... 61914
Имитационное мо... 57793
Реклама
Сейчас на сайте
Гостей: 5
На сайте нет зарегистрированных пользователей

Пользователей: 13,085
новичок: nikita222dolban
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование работы аэропорта на GPSS + Пояснительная записка
Принадлежит ли точка пересечению двух окружностей на Turbo Pascal + Отче...
Моделирование работы класса персональных компьютеров на GPSS + Отчет + Б...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Стеки в Delphi
Стек (stack) - это упорядоченный список, где элементы всегда добавляются
и удаляются с одного конца. Стек можно сравнить со стопкой книг на полу. Вы
можете добавлять книги на вершину стопки и убрать их с вершины, но добавить
или убрать книгу из середины стопки вы не сможете.
Стеки часто называют списками типа последний пришел — первый вышел (Last-
In-First-Out list — LIFO). По историческим причинам добавление элемента в стек
называется проталкиванием (pushing), а удаление - выталкиванием (popping).
Первая реализация простого списка на основе массива, описанное в начале
главы 2, является стеком. Для отслеживания положения вершины списка исполь-
зуется счетчик. Затем с помощью счетчика осуществляется вставка и удаление эле-
ментов из вершины списка.
Единственное незначительное изменение, сделанное в данном случае, - это
введение новой функции Pop, которая удаляет элемент из стека и возвращает его
значение. Это позволяет другим процедурам отыскивать элемент и удалять его из
стека за один шаг.

// Проталкивание элемента в стек.
procedure TArrayStack.Push(value : String);
begin
// Убедиться, что для элемента есть место.
if (NumItems>=NumAllocated) then ResizeStack;
Numltems := Numltems+1;
Stack^[Numltems] := value;
end;
// Выталкивание элемента из стека.
function TArrayStack.Pop : String;
begin
if (Numltems<l) then
raise EInvalidOperation.Create('Стек пустой.');
Result := Stack^[Numltems] ;
NumIterns := NumIterns-1;
if (NumItems<ShrinkWhen) then ResizeStack;
end;




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

procedure ReverseArray;
var
the_stack : TArrayStack;
i : Integer;
begin
// Создание стека.
the_stack := TArrayStack.Create;
// Проталкивание элементов в стек.
for i := 1 to Numltems do
the_stack.Push(the_array[i]);
// Выталкивание элементов из стека и помещение их обратно в массив.
for i := 1 to Numltems do
the_array[i] := the_stack.Pop;
end;




В этом примере длина стека может многократно изменяться до тех пор, пока он
не опустеет. Если вы заранее знаете, каким должен быть размер массива, лучше сра-
зу создать подходящий стек. Тогда вместо изменения размера стека по мере того,
как он растет или уменьшается, достаточно будет выделить под него память в нача-
ле работы и очистить ее после окончания действий.
Следующий код позволяет заранее сформировать стек, если сразу известен его
максимальный размер. Функция Pop не изменяет размер массива. Когда програм-
ма заканчивает работу со стеком, она должна вызвать процедуру FreeStack для
освобождения занятой под стек памяти.

// Создание большого массива, достаточного для размещения всего стека.
procedure TArrayStack.PreallocateStack(entries : Integer);
begin
NumAllocated := entries;
GetMem(Stack,NumAllocated*SizeOf(Longint));
end;
// Освобождение массива стека.
procedure TSimpleStack.FreeStack;.
begin
NumAllocated := 0;
PreeMem(Stack);
end;
// Проталкивание элемента в стек.
procedure TArrayStack.Push(value : String);
begin
// Убедиться, что для элемента есть место
if (NumItems>=NumAllocated) then
raise EInvalidOperation.Create('Стек заполнен.');
Numltems := Numltems+l;
Stack^[NumItems] := value;
end;
// Выталкивание элемента из стека.
function TArrayStack.Pop : String;
begin
if (Numltems<l) then
raise EInvalidOperation.Create('Стек пустой.');
Result := Stack^[Numltems];
NumIt ems : = NumItems-1;
end;




Этот способ реализации стеков весьма эффективен. Стек не расходует пона-
прасну память, и не требуется дополнительное время для частого изменения его
размера, особенно если сразу известно, насколько большим он должен быть.
Опубликовал Kest September 23 2009 00:49:00 · 0 Комментариев · 17092 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
CodeGear RAD Stud...
Email
Создание Web-сайт...
Bitmap [для кнопок]
Задача о 8ми ладьях
Программа "AutoRu...
Delphi и технолог...
Шкрыль А. - Разра...
Cooltray
Domen Name IP
Экспорт базы данн...
Добавление к ссы...
ScreenSaver [Исхо...
Delphi Russian Kn...
PDPcheck
Пятнашки и крести...
База Allsubmitter...
iChat v.7.0 Final...
Как программирова...
Дешифратор содерж...

Топ загрузок
Приложение Клие... 100470
Delphi 7 Enterp... 87103
Converter AMR<-... 20078
GPSS World Stud... 12859
Borland C++Buil... 11848
Borland Delphi ... 8604
Turbo Pascal fo... 7039
Visual Studio 2... 4999
Калькулятор [Ис... 4804
FreeSMS v1.3.1 3542
Случайные статьи
Самая лучшая фирма...
Для этого вы блоки...
Гарантирует, что п...
Правила единственн...
Глава 5
Файл main.срр — пр...
Как работает проек...
Экзамен 200-100 Ze...
Жизненный цикл про...
Исследование модел...
10-17)
метод DelOrders
Как самому создать...
tld и engineering,...
Копирование всех э...
Файл main.cpp
Наконец-то казино ...
Аватар
Установка и удален...
Ввод-вывод символь...
Принципы реализаци...
Подход к реализаци...
Каналы STREAMS
Эффект зеркального...
Отделение интерфей...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?