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.

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

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


 

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

56542. Изготовление поздравительной открытки к 8 Марта 69.5 KB
  Формировать практические приемы работы с бумагой. Умение выполнять приёмы работы с бумагой. Проявление эмоционального отношения к выполнению работы. Объяснение последовательности выполнения работы 3 мин.
56543. ТРУДНО БЫТЬ СОБОЙ 123 KB
  Цель: познакомить учащихся с понятиями личность индивидуальность; показать неповторимость уникальность личности; дать представление о путях формирования личности. Развитие личности довольно медленный процесс.
56544. Застосування розв’язування трикутників у прикладних задачах 1.12 MB
  Мета уроку: Формувати вміння учнів у застосуванні знань розвязування трикутників до розвязування прикладних задач. Розвивати у учнів інтерес до математики шляхом розвязування прикладних задач формувати зацікавленість у результатах спільної роботи.
56545. Треугольники 212.5 KB
  Цель урока. Усвоить определение треугольника, медианы, биссектрисы, высоты треугольника; научить учащихся определять элементы треугольника, выполнять классификацию треугольников по углам...
56546. Розв’язування прямокутних трикутників 74 KB
  Мета уроку. Узагальнення, систематизація та закріплення знань про теорему Піфагора, розв’язування прямокутних трикутників; застосування набутих знань і вмінь у практичній діяльності.
56547. Основні фактори прояву шкільної тривожності 53 KB
  Існує навіть термін шкільна фобія що означає страх перед відвідуванням школи що переслідує деяких дітей. Іноді батьки самі бояться школи і мимоволі вселяють цей страх дітям чи драматизують проблеми початку навчання виконують...
56548. Целеполагание на уроках музыкального воспитания 33.5 KB
  Цель воспитание музыкального вкуса нравственных и эстетических чувств уважение к истории своей Родины музыкальным традиция своего народа и культур разных стран мира; показ песни.
56549. Профессия. Работа 1.64 MB
  Цели: совершенствовать навыки употребления изученного лексико-грамматического материала, познакомить со строением официально-делового письма, развивать навыки устной и письменной речи, формировать представление об активном образе жизни, развивать навыки делового общения.
56550. Є цінності, які за все дорожчі… Урок розвитку зв’язного мовлення. Твір-роздум на морально-етичну тему 73.5 KB
  Мета: формувати в учнів уміння і навички, які б сприяли вільному використанню засобів мови в будь-яких життєвих ситуаціях під час сприймання, відтворення і створення власних висловлювань...