Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lin_St.doc
Скачиваний:
1
Добавлен:
15.12.2018
Размер:
89.09 Кб
Скачать

Лабораторная работа 4 Линейные связанные структуры

1. Стек

2. Очередь

3. Список

Стек

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

Программно стек реализуется в виде однонаправленного списка с одной точкой входа (вершиной стека).

Пример. Используя стек, напечатать содержимое текстового файла в обратном порядке.

Решение:

Program STEK; Type EXST = ^ST;   ST = record         Data : char;        Next : EXST;   End; Var Stack : EXST; {Текущая переменная}   i : integer;   f : text;   Stroka : string; c : char; Procedure writeStack(Var u : EXST; Simvol : char); Var x : EXST; Begin   new(x);   x^.Data := Simvol;   x^.Next := u;   u := x; End; Procedure Print(Var u : EXST); Begin   while u <> Nil do   Begin     write (u^.Data);     u := u^.Next;   End; End;

Begin   Stack := Nil;   Assign(f, 'TEXT.IN');   Reset(f);   while Not Eof(f) do   Begin     readln(f,Stroka);     For i := 1 to Length(Stroka) do         writeStack(Stack, Stroka[i]);   End;   close(f);   Print(Stack); End.

Контрольные вопросы

  1. Дайте определение динамической структуры «стек».

  2. Сколько элементов может содержать стек?

  3. Можно ли последовательно "связать" два стека разного типа и почему?

  4. Можно ли одновременно работать с несколькими стеками?

Упражнения

1. Создать стек со случайными целыми числами в диапазоне –50 до +50 и преобразовать его в два стека. Первый должен содержать только положительные числа, а второй - отрицательные. Порядок чисел должен быть сохранен, как в первом стеке.

2. Создать стек из случайных целых чисел и удалить из него записи с четными числами.

3. Создать стек из случайных целых чисел в диапазоне от –10 до 10 и удалить из него записи с отрицательными числами.

4. Создать стек из случайных целых чисел и поменять местами крайние элементы.

5. Подсчитать, сколько элементов стека, построенного из случайных чисел, превышает среднее значение от всех элементов стека.

6. Создать стек из случайных целых чисел и найти в нем максимальное и минимальное значение.

7. Создать стек из случайных целых чисел и определить, сколько элементов стека, начиная с вершины, находится до элемента с максимальным значением.

8. Создать текстовый файл, содержащий текстовую и числовую информацию. Используя стек, создать другой текстовый файл, в котором числа будут записаны в обратном порядке.

9. Создать текстовый файл, содержащий текстовую информацию. Используя стек, создать другой текстовый файл, в котором слова будут записаны в обратном порядке.

10. Создать текстовый файл, содержащий некоторую информацию. Используя стек, создать другой текстовый файл, в котором строки будут записаны в обратном порядке.

11. Создать текстовые файлы, содержащие один текстовую, а другой числовую информацию (количество слов и чисел должно быть одинаковым). Используя стек, создать другой текстовый файл, в котором числа и слова чередовались:

1) и были бы записаны в обратном порядке;

2) а порядок чисел и слов был бы сохранен.

12. Создать текстовые файлы, содержащие один текстовую, а другой числовую информацию (количество слов и чисел может быть неодинаковым). Используя стек, создать другой текстовый файл, в котором числа и слова чередовались и были бы записаны в обратном порядке ("лишние" числа или слова были бы записаны в конец файла).

13. В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений в этой программе:

1) циклов;

2) операторных скобок (begin - end).

14. В файле записан текст, сбалансированный по круглым скобкам. Требуется для каждой пары соответствующих открывающей и закрывающей скобок напечатать номера их позиций в тексте, упорядочив пары номеров по возрастанию номеров позиций закрывающих скобок. Например, для текста a+(45-f(x)*(b-c)) надо напечатать 8 10, 12 16, 3 17.

15. В текстовом файле без ошибок записано логическое выражение следующего вида: <лог.выр>::=true | false | <лог.выр> and <лог.выр> | <лог.выр> or <лог.выр>. Используя стек, вычислить значение этого выражения с учетом общепринятого приоритета операций.

16. Написать процедуру присоединения стека S2 к стеку S1.

17. Определить симметричность произвольного текста любой длины. Текст должен оканчиваться точкой. Задачу решить с помощью двух стеков.

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

19. Проверить, является ли строка палиндромом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]