Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 6
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2014 » Июль » 22 » Списки, стеки и очереди.
15:53
Списки, стеки и очереди.
Списком называется структура данных, каждый элемент которой посредством указателя связывается со следующим элементом. Списки бывают с одной связью (указатель только на следующий элемент) и двухсторонней связью (указатель на следующий и предыдущий элемент). Рассмотрим первый вариант - односвязный список.Функции работы со списками (см. '); {выведем элемент списка} spisok:'); show(head); readln; erase(head);end.Задача.В каждой строке сначала записан номер класса (число, равное 9, 10 или 11), затем (через пробел) – фамилия ученика. Необходимо вывести список школьников по классам: сначала всех учеников 9 класса, затем – 10, затем – 11. Внутри одного класса порядок вывода фамилий в алфавитном порядке. Окончание ввода данных с клавиатуры обеспечивается по нажатию клавиш Ctrl+Z, Enter.Пример Входные данныеВыходные данные9 Иванов10 Петров11 Сидоров9 Григорьев9 Сергеев10 Яковлев 9 Григорьев9 Иванов9 Сергеев10 Петров10 Сидоров11 Яковлевtype ',tmp^.fio);      стек" так же как для односвязного списка, но к этому виду списка неприменима операция обхода элементов.Функции работы со стеком (см. втолкнуть" (добавить) в стек}Var tmp : PtrStack;{временная переменная}Begin new(tmp); {выделяем память под хранение нового элемента стека} tmp^.Data связываем" со стеком} A вытолкнуть" (удалить) из стека}Var tmp : PtrStack;{временная переменная}Begin if A<>nil then begin {если стек не пустой} {','(','[':pop(tmp,top); '}':if push(top)<>'{' then begin write('No'); exit; end; ']':if push(top)<>'[' then begin write('No'); exit; end; ')':if push(top)<>'(' then begin write('No'); exit; end; end; end; if Yes') else begin write('No'); while top<> nil do push(top);{очищаем память} end; end;BEGIN   Solve;END.Задача: Постфиксная запись числа. В постфиксной записи (или обратной польской записи) операция записывается после двух операндов. Например, сумма двух чисел A и B записывается как A B +. Запись B C + D * обозначает привычое нам (B + C) * D, а запись A B C + D * + означает A + (B + C) * D. Достоинство постфиксной записи в том, что она не требует скобок и дополнительных соглашений о приоритете операторов для своего чтения. Необходимо вывести значение записанного выражения. Пример Входные данныеВыходные данные8 9 + 1 7 - *-102Type  PtrStack = ^RecStack;  RecStack = record             Data : integer;             Next : PtrStack;         end;Var  top: PtrStack;Procedure Pop(D : integer; Var A : PtrStack);Var  tmp : PtrStack;Begin  new(tmp);  tmp^.Data 0'..'9':begin             val(tmp,c,a);             pop(c,top);           end;           '+':begin            -':begin            *':begin            шестерка берет туза"). Игрок, который забирает себе карты, сначала кладет под низ своей колоды карту первого игрока, затем карту второго игрока (то есть карта второго игрока оказывается внизу колоды).Напишите программу, которая моделирует игру в пьяницу и определяет, кто выигрывает. В игре участвует 10 карт, имеющих значения от 0 до 9, большая карта побеждает меньшую, карта со значением 0 побеждает карту 9. Программа получает на вход две строки: первая строка содержит 5 карт первого игрока, вторая – 5 карт второго игрока. Карты перечислены сверху вниз, то есть каждая строка начинается с той карты, которая будет открыта первой.Программа должна определить, кто выигрывает при данной раздаче, и вывести слово first или second, после чего вывести количество ходов, сделанных до выигрыша. Если на протяжении 106 ходов игра не заканчивается, программа должна вывести слово botva. Пример Входные данные   Выходные данные1 3 5 7 9                    second 5 2 4 6 8 0 type  PtrQueue = ^RecQueue;  RecQueue = record       Data : integer;       Next : PtrQueue;  end;var x01,x02,x1,x2:PtrQueue;a:integer;Procedure add(Var BeginO, EndO : PtrQueue; c : integer);Var  tmp : PtrQueue;Begin  new(tmp);  tmp^.Data first ', k);exit; end;   end else begin       add(x02,x2,a1);       add(x02,x2,a2);       if t1 then begin writeln('second ', k);exit;end;   end;  end;  writeln('botva');end.Задача.  Из заданного текста перенести все цифры в конец каждой строки, сохранив их порядок.Type PtrQueue = ^RecQueue; RecQueue = record  Data : char;  Next : PtrQueue; end;Var f1, f2 : text; Stroka, NewStroka : string;Procedure add(Var BeginO, EndO : PtrQueue; c : char);Var tmp : PtrQueue;Begin   new(tmp);   tmp^.Data := ''; for i 0'..'9'] then add(O2, EndO2, St[i]) else add(O1, EndO1, St[i]); while O1 <> Nil do begin del(O1, l); NewSt input.txt');reset(f1);  assign(f2, 'output.txt');rewrite(f2);  while not Eof(f1) do  begin   readln(f1, Stroka);   ModifyStr(Stroka, NewStroka);   writeln(f2, NewStroka);  end;  close(f1);  close(f2);End. 
Просмотров: 249 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Форма входа
Календарь
«  Июль 2014  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей