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.

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

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


 

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

17778. ЗАГАЛЬНА ФІЗІОЛОГІЯ РЕГУЛЯЦІЇ ФУНКЦІЙ ОРГАНІЗМУ 3.29 MB
  загальна фізіологія регуляції функцій організму. 1. Біологічна регуляція її види і значення. Контур біологічної регуляції. Роль зворотнього звязку в регуляції. Біологічна регуляція процес взаємодії елементів організму спрямований на отримання пристосувального ...
17779. НЕРВОВА ТА ГУМОРАЛЬНА РЕГУЛЯЦІЯ ВЕГЕТАТИВНИХ ФУНКЦІЙ ОРГАНІЗМУ 1.15 MB
  НЕРВОВА ТА ГУМОРАЛЬНА РЕГУЛЯЦІЯ ВЕГЕТАТИВНИХ ФУНКЦІЙ ОРГАНІЗМУ. Вегетативні функції функції внутрішніх органів гладеньких мязів судин та обмін речовин. 17. Загальний план будови автономної нервової системи. Вегетативні рефлекси їх рефлекторні дуги. Вегетат
17780. ФІЗІОЛОГІЯ ТРАВЛЕННЯ 1.06 MB
  фізіологія травлення. 1. Загальна характеристика системи травлення. Травлення в ротовій порожнині. Жування ковтання. ...
17781. ФІЗІОЛОГІЯ КРОВІ 756 KB
  фізіологія крові. 1. Загальна характеристика системи крові. Склад і функції крові. Поняття про гомеостаз. Кров циркулююча знаходиться в стані активно...
17782. ФІЗІОЛОГІЯ КРОВООБІГУ 2.43 MB
  фізіологія кровообігу. 1. Загальна характеристика системи кровообігу. Фактори які забезпечують рух крові по судинах його спрямованість та безперервність. В залежності від потреби
17783. Фізіологія дихання, енергетичного обміну, терморегуляції 1.28 MB
  фізіологія дихання енергетичного обміну терморегуляції. Загальна характеристика системи дихання. Основні етапи дихання. Біомеханіка вдиху і видиху. Дихання процес обміну газів О2 та СО2 між атмосферним повітрям та тканинами організму. ...
17784. Фізіологія виділення 124 KB
  Нирки являються основним органом системи виділення, так як тільки він виділяючи з організму в великій кількості продукти азотистого обміну, підтримують їх концентрацію в крові на певному рівні. Участь в цьому процесі шкіри, травного каналу та їх залоз недостатньо.
17785. Применение Excel для обработки данных 48 KB
  Лабораторная работа № 1 Применение Excel для обработки данных Зависимость представлена квадратической параболой .1 Самостоятельно сформировать тестовый пример задав коэффициенты для уравнения 1 в виде произвольных констант. Заполнить след...
17786. Координатна вісь, або одновимірний простір 2.03 MB
  ЛЕКЦІЯ 1 Координатна вісь або одновимірний простір Візьмемо пряму лінію і задамо на ній додатний напрям звичайно його показують стрілкою. Тоді протилежний напрям буде від'ємним. Напрямлена пряма називається віссю. Якщо на осі вибрати довільну точку обліку О і масшт...