37786

Двозв’язні списки

Лабораторная работа

Информатика, кибернетика и программирование

Мета: навчитися програмувати з використанням вказівників та динамічних змінних, створювати та опрацьовувати двозвязні списки...

Украинкский

2013-09-25

315.92 KB

3 чел.

5

Міністерство освіти і науки України

Хмельницький національний університет

Кафедра системного програмування

Лабораторна робота №2

з програмування

на тему:

«Двозвязні списки»

Виконав:

Студент групи КІ-10-1

Ноль М.Г.

Перевірив:

Мостовий С.В.

Хмельницький

2011

Лабораторна робота №2

Тема: двозв'язні списки.

Мета: навчитися програмувати з використанням вказівників та динамічних змінних,  створювати та опрацьовувати двозв'язні списки.

Завдання

Дано «покажчик» на один з елементів непустого двозв'язного списку. Видалити зі списку даний елемент і вивести два «покажчика»: на елемент, що передує вилученому і на елемент, що іде за вилученим (один або обидва цих елементи можуть бути відсутніми; для відсутніх елементів виводити nil). Після видалення елемента зі списку звільнити пам'ять, займану цим елементом.

uses crt;

type vkaz=^spysok;

       spysok=record

              num:integer;

              next,

              last:vkaz

              end;

procedure add(var a,head,tail:vkaz; D:integer);

     begin

     if a=nil then

           begin

           new(a);

           a^.next:=nil;

           a^.last:=nil;

           head:=a;

           end

     else

           begin

           new(a^.next);

           a^.next^.last:=a;

           a:=a^.next;

           a^.next:=nil;

           end;

     a^.num:=D;

     tail:=a;

     end;

procedure create(var a,head,tail:vkaz; var n:integer);

  var i,D:integer;

      begin

      repeat

            write('vvedit kilkist chysel: ');

            readln(n)

      until n>0;

      for i:=1 to n do

            begin

            add(a,head,tail,random(50));

            write(a^.num,' ');

            end;

       writeln;

       end;

procedure Search(var a:vkaz; head:vkaz; var D:integer);

 var p:boolean;

       begin

       repeat

             write('vvedit element dlja vydalennja: ');

             readln(D);

             a:=head;

             while (a<>nil) and (d<>a^.num) do a:=a^.next;

             if a^.num=D then p:=true

        until p;

        end;

procedure DelEl(var a:vkaz; head:vkaz);

  var temp:vkaz; D:integer;

        begin

        search(a,head,D);

        if (a^.last=nil) and (a^.next=nil) then

               begin

               writeln('poperednij element=NIL');

               writeln('nastupnyj element=NIL');

               temp:=a;

               a:=nil;

               dispose(temp);

               end

        else

               begin

               if (a^.last=nil) or (a^.next=nil) then

                       begin

                       if a^.last=nil then

                                begin

                                writeln('poperednij element=NIL');

                                writeln('nastupnyj element: ',seg(a^.next^),ofs(a^.next^));

                                temp:=a;

                                a^.next^.last:=nil;

                                dispose(temp);

                                end;

                       if a^.next=nil then

                                begin

                                writeln('nastupnyj element=NIL');                                 

                                writeln('poperednij element: ',seg(a^.last^),ofs(a^.last^));

                                temp:=a;

                                a^.last^.next:=nil;

                                dispose(temp);

                                end;

                       end

               else

                       begin

                       writeln('poperednij element: ',seg(a^.last^),ofs(a^.last^));

                       writeln('nastupnyj element: ',seg(a^.next^),ofs(a^.next^));

                       temp:=a;

                       a^.last^.next:=a^.next;

                       a^.next^.last:=a^.last;

                       dispose(temp);

                       end;

               a:=head;

               while a<>nil do

                       begin

                       write(a^.num,' ');

                       a:=a^.next;

                       end;

                end;

        end;

procedure free(var a,tail:vkaz);

  var temp:vkaz;

        begin

        if a<>nil then

               begin

               a:=tail;

               while a<>nil do

                      begin

                      temp:=a;

                      a:=a^.last;

                      dispose(temp);

                      end;

                end

        else dispose(a);

        end;

  

    var el,head,tail:vkaz; n,d:integer;

begin clrscr; randomize;

create(el,head,tail,n);

DelEl(el,head);

free(el,tail);

repeat until keypressed;

end.

Результати виконаної програми:

Висновок.  Виконавши лабораторну роботу, я закріпив навички роботи з вказівниками, динамічними змінними та динамічними структурами даних; засвоїв алгоритми створення двозв’язного списку з різною кількістю елементів та додавання, пошуку і видалення елементів цього списку.


 

А также другие работы, которые могут Вас заинтересовать

2431. Способи вираження кількісного складу розчинів 40.22 KB
  Розчинами є плазма крові, слина, шлунковий сік, сеча та інші рідини людського організму. З утворенням розчинів пов’язані процеси засвоєння їжі та виведення із організму продуктів життєдіяльності. У формі розчинів у організм вводиться багато лікарських препаратів. Тому лікареві необхідні знання про величини, що характеризують кількісний склад розчинів.
2432. Сучасні класифікаці психічних розладів. Невротичні розлади 34.5 KB
  МКХ-10 vs DSM-IV. Невротичні розлади: зміст поняття та історія вчення. Теорії етіології та патогенезу. Невротична симпоматика. Класифікація невротичних розладів.
2433. История средних веков. Возникновение мира: мифы и реальность 30.5 KB
  Вспомним статью о возникновении мира и миф о его творении. При всем их различии, у них есть нечто общее. Что? Они оба основаны на предпосылке: Мир имеет начало. Сама идея поиска начала вселенной во времени – далеко не очевидна. Идея творения мира из ничего – христианская идея, и зарождается она где-то в I в. н.э.
2434. Приготування розчинів із заданим кількісним складом 28.2 KB
  Розчини з молекулярним та іонним характером дисперсності розчиненої речовини – справжні розчини – найважливіша складова частина біологічних рідин. Водні розчини електролітів та низькомолекулярних речовин забезпечують постійний осмотичний тиск, активну реакцію середовища.
2435. Фактори психологічного розвитку людини 30 KB
  Нормативні вікові фактори, які знижуються у юнацькому віці. Нормативні історичні фактори, які є майже симетрично протилежними до вікових. Ненормативні фактори. Чим старшою стає людина, тим більше ці фактори на неї впливають.
2436. Соціальні установки 41 KB
  Установки, як ефективний спосіб оцінювання світу. Рольова поведінка та установки. Причина впливу поведінки на установки. Когнітивний дисонанс. Ефект недостатнього виправдання. Причини впливу поведінки на установки в руслі різних теорій.
2437. Расчет горно-транспортного комплекса в соответствии с эксплуатационной производительностью экскаватора ЭКГ-8,3 715.56 KB
  Развитие открытых горных разработок в ближайшие 10-15 лет определяется не только все возрастающими потребностями общества в минеральном сырье и конкурентоспособностью с подземным способом разработки, но также все увеличивающимися экологическими ограничениями.
2438. Експлуатація і обслуговування машин 902 KB
  Мета і завдання курсу Експлуатація і обслуговування машин. Планування технічного обслуговування та ремонту будівельних машин. Види і періодичність ТО тракторів і машин. Вплив степеня очищення повітря. Вплив стану експлуатаційних матеріалів на надійність роботи двигуна. Зберігання і консервація машин.
2439. Исследование характеристик тиристора и управляемого выпрямителя 1.67 MB
  Целью работы является: исследование вольтамперной характеристики и определение параметров тиристора, получение семейства статических характеристик тиристора, исследование работы регулируемого однополупериодного выпрямителя.