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.

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

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


 

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

58492. Беседа о здоровом образе жизни. Подвижные игры: эстафеты, подвижные игры «Вороны и воробьи», «Белые медведи» 106 KB
  Подготовительная 10 мин 1.Построение в шеренгу 2 мин Построились. Сначала мы с вами побеседуем затем сделаем разминку: ходьба прыжки на месте и в движении и беговые упражнения затем проведем эстафету и поиграем 3. Построение в шеренгу 1 мин Беседа о здоровом образе жизни.
58493. Подвижные игры 40.5 KB
  Задачи: Обучить игре «Запрещенное движение», «3, 13, 33» Способствовать формированию правильной осанки; развивать внимание, ловкость, быстроту. Воспитывать коллективизм, настойчивость.
58494. Дидактические игры на уроках французского языка 467.5 KB
  Ход работы: ученику предлагается конверт с разрезанной внутри картинкой, на одной стороне которой изображен вид спорта, игры, действия или спортивного сооружения, а на другой – его графическое написание с транскрипцией.
58496. Робинзон Крузо Даниэля Дефо. Урок французского языка 467 KB
  В уроке приведен достаточно сложный с точки зрения грамматики и лексики текст для 7 класса. Необходимо изменить его согласно уровню класса либо предложить другой текст. Составьте словарь по тексту, чтобы легче было работать при первом прочтении на уроке.
58497. УРОК ГЕОГРАФИИ 27.5 KB
  Учитель Ребята сегодня мы будем проходить новую тему Франция. Учитель Ну и куда ты собралась на лето Где отдыхать будешь Иванова Как обычно у бабушки в одной из четырёх Франций которым по площади равна наша Московская область.
58498. Урок-путешествие «По следам Робинзона» 34.5 KB
  Озвучивается тема урока по следам Робинзона Крузо Задумывались ли вы когданибудь над тем существовал ли Робинзон Крузо этот мужественный герой в действительности и если да то где расположен его остров Дети высказывают предположения.
58499. Принципы, этапы контролируемой чистки. Способы мотивации пациента 51 KB
  Для мотивации пациента кабинет гигиены и профилактики предполагает обязательное наличие умывальника, зеркала и специальных средств, предназначенных для информирования пациентов...