|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
09.02.2011, 20:26 | #1 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
Программа со стеками.
Программа работает, но есть одно НО. Не вставляет элемент перед первым, т.е. напр. "0" элемент перед "1". Не могу никак додуматься. Толи ещё 1 функция нужна, то ли повернуть проверку счета не с начала в конец, а наоборот. Код:
program linked_list; const n = 5; type pnode = ^node; node = record { элемент списка } d : word; s : string; p : pnode; end; var beg : pnode; { указатель на начало списка } i, key : word; s : string; option : word; const text: array [1 .. n] of string = ('one', 'two', 'three', 'four', 'five'); procedure add(var beg : pnode; d : word; const s : string); var p : pnode; { указатель на создаваемый элемент } t : pnode; { указатель для просмотра списка } begin new(p); { создание элемента } p^.d := d; p^.s := s; { заполнение элемента } p^.p := nil; if beg = nil then beg := p { список был пуст } else begin { список не пуст } t := beg; while t^.p <> nil do { проход по списку до конца } t := t^.p; t^.p := p; { привязка нового элемента к последнему } end end; function find(beg : pnode; key : word; var p, pp : pnode) : boolean; begin p := beg; while p <> nil do begin { 1 } if p^.d = key then begin { 2 } find := true; exit end; pp := p; { 3 } p := p^.p; { 4 } end; find := false; end; procedure insert(beg : pnode; key, d : word; const s : string); var p : pnode; { указатель на создаваемый элемент } pkey : pnode; { указатель на искомый элемент } pp : pnode; { указатель на предыдущий элемент } begin if not find(beg, key, pkey, pp) then begin writeln(' out error'); exit; end; new(p); {1} p^.d := d; p^.s := s; {2} p^.p := pkey^.p; {3} pkey^.p := p; {4} end; p^.p:=nil; procedure del(var beg : pnode; key : word); var p : pnode; { указатель на удаляемый элемент } pp : pnode; { указатель на предыдущий элемент } begin if not find(beg, key, p, pp) then begin writeln(' delete error'); exit; end; if p = beg then beg := beg^.p { удаление первого элемента } else pp^.p := p^.p; dispose(p); end; procedure print(beg : pnode); var p : pnode; { указатель для просмотра списка } begin p := beg; while p <> nil do begin { цикл по списку } writeln(p^.d:3, p^.s); { вывод элемента } p := p^.p { переход к следующему элементу списка } end; end; begin for i := 1 to 5 do add(beg, i, text[i]); while true do begin writeln('1 - past, 2 - delete,3 - out, 4 - exit'); readln(option); case option of 1: begin { вставка } writeln('Key for past?'); readln(key); writeln('past element?'); readln(i); readln(s); insert(beg, key, i, s); end; 2: begin { удаление } writeln('Key for delete?'); readln(key); del(beg, key); end; 3: begin { вывод } writeln('out list:'); print(beg); end; 4: exit; { выход } end; writeln; end end. |
09.02.2011, 20:26 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посоветую вам прочитать содержимое данных топиков Программа для ХР Программа Программа Что за программа? Программа для 3D |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|