69120

Спискові структури даних. Визначення лінійного списку та його різновидів. Робота зі стеком, з чергою та лінійним списком

Лекция

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

Визначення лінійного списку та його різновидів. Визначення лінійного списку та його різновидів 3. Визначення лінійного списку та його різновидів Як приклад розглянемо таку задачу. Кожен компонент списку крім останнього містить покажчик на наступний або на наступний попередній компонент.

Украинкский

2014-09-30

111 KB

16 чел.

Лекція 29. Тема: Спискові структури даних. Визначення лінійного списку та його різновидів.

                          Робота зі стеком, з чергою та лінійним списком.

План:

1. Спискові структури даних

2. Визначення лінійного списку та його різновидів

3. Робота зі стеком

4. Робота з чергою

5. Робота з лінійним списком

1. Спискові структури даних

Використання покажчиків є ефективним способом побудови динамічних структур даних. У розділах 7-9 вже розглядалися структури даних, такі як масиви, множини, записи та файли. Ці структури є статичними, тому що їхні розміри визначаються на етапі компшяції і залишаються незміниими протягом усього часу виконання програми. Розміри динамічних структур даних визначаються і можуть змшюватися під час виконання. Основними різновидами динамічних структур є лінійні списки, дерева (нелінійні списки) і дииамічні масиви.

2. Визначення лінійного списку та його різновидів

Як приклад розглянемо таку задачу. Здійснюється реестрація автомобілів, які прибувають на автостоянку та залишають її. Потребно зберігати і обробляти множину номерів автомобілів. Для воображення цієї множини в пам'яті комп'ютера необидно обробити певну структуру даних. Вибір масиву буде невдалим з декількох причин. По-перше, умова задачі не обмежує кількість автомобілів, а розмір масиву є обмеженим. По-друге, в разі прибуття кожного нового автомобіля на автостоянку або його відїзду потрібно буде вставити або видалити елементи масиву. Така операція є досить трудомісткою, оскільки потребує послідовного зсуву в пам'яті значної кількості елементів. Вирішити ці проблеми можна  шляхом викостання динамічної структури даних. яка називається зв'язним лінійним списком.

Зв'язний лінійний список - це сукупність однотипних компонентів, які послідовно зв'язані між собою за допомогою покажчиків. Кожен компонент списку, крім останнього, містить покажчик на наступний (або на наступний  попередній) компонент. Доступ до першого компонента здійснюється за допомогою покажчи-ка на нього, а доступ до кожного наступного компонента - з використанням покажчика, який зберігається у попередньому компоненті. Перший компонент списку називається його вершиною, або головою.

Над зв'язними лінійними списками виконуються такі дії:

додавання нового компонента на початок списку;

додавання нового компонента в кінець списку;

вставка нового компонента між двома наявними компонеитами списку.

видалення компонента зі списку.

Зв'язні лінійні списки поділяють на такі різновиди:

однозв'язний лінійний список;

двозв'язний лінійний список;

однозв'язний циклічний список;

двозв'язний циклічний список;

стек;

черга.

Однозв'язний лінійний список - це список, в якому попередній компонент посилається на наступний.

Двозв'язний лінійний список - це список, в якому попередній компонент посилається на наступний, а наступний - на попередній.

Однозв'язний циклічний список - це однозв'язний лінійний список, в якому останній компонент посилається на перший.

Двозв'язний циклічний список - це двозв'язній лінійний список, в якому останній компонент посилається на перший, а перший компонент - на останній.

Стек - це однозв'язний лінійний список, в якому компоненти додаються та видаляються лише з його вершини, тобто з початку списку.

Черга - це однозв'язний лінійний список, в якому компоненти додаються в кінець списку, а видаляються з вершини, тобто з початку списку.

Графічне зображення однозв'язного лінійного списку ви бачите на рис. 10.5.

Опишемо тип компонентів зв'язного лінійного списку. Почнемо з однозв'язного лінійного списку. Кожний його компонент складається з кількох інформаційних полів та покажчика на наступний компонент. Отже, компонент зв'язного лінійного списку є записом. Інформаційні поля компонента списку можуть бути змінними будь-яких типів, а покажчик повинен бути покажчиком на запис того типу, якому належать компоненти списку. Покажчик в останньому компоненті лінійного списку має значення nil - так позначається кінець списку.

Тип покажчика на компонент однозв'язного лінійного списку має бути оголошений перед оголошенням типу компонента списку. Таке виключення з правил зроблено спеціально для типів компонентів динамічних структур.

Нанедемо приклад оголошення типу компонента однозв'язного лінійного списку. У найпростішому випадку компонент містить одне інформаційне поле, у якому може зберігатися, наприклад, реестраційний номер автомобіля. Для роботи з таким списком потрібні покажчики на перший і поточний компоненти. Оголосимо ці покажчики після оголошення типу компонента списку.

type

  ptr=^Item;     {тип покажчика на компонент списку}

  Item=record   {тип компонента}

          data:string;   {інформаційне поле}

           next:ptr;   {покажчик на наступний компонент}

        end;

var      {покажчик на перший та }

    head, curr:ptr;    {поточний компонент списку}

3. Робота зі стеком

Стек - це один із різновидів однозв'язного лінійного списку, доступ до елементів якого можливий лише через його початок, що називається вершиною стеку. Стек працює за принципом «останій прийшов - першим вийшов», що позначається абревіатурою LIFO (від англ. Last In First Out), і має такі властивості:           -  елементи додаються у вершину (голову) стеку;

-  елементи видаляються з вершини (голови) стеку;

-  покажчик в останньому елементі стеку дорівнює ni1;

-  неможливо вилучити елемент із середовища стеку, не вилучивши всі елементи що йдуть попереду.

У програмуванні стеки маютъ широке застосування. Наприклад, під час виклику підпрограми адреса повернення до неї зберігається у стеку. Стек використовуєтъся компілятором під час обчислення виразів, до нього записуютъся значення локальних змінних тощо.

Для роботи зі стеком достатнъо мата покажчик head на його вершину та допоміжний покажчик current на елемент стеку. Наведено алгоритми основних операцій зі стеком - вставки та видалення його елемента.

Алгоритм вставки елемента до стеку

1. Виділити пам'ятъ для нового елемента стеку: new(current) (рис. 10.6. а).

2. Ввести дані до нового елемента: readln(current^.data) (рис. 10.6, б).

3. Зв'язати допоміжний елемент із вершиною: current^.next:=head (рис. 10.6, в).

4. Встановити вершину стеку на новостворений елемент: head:=current (рис. 10.6,1).

Зауважимо, що значенням покажчика head на вершину порожнъого стеку є ni1. Тому для створення стеку слід виконати оператор head:=ni1 та повторити щойно наведений алгоритм потрібну кількість разів.

Алгоритм видалення елемента із непорожнього стеку

1. Створити копію покажчика на вершину стеку: current:=head; (рис. 10.7, а).

2. Перемістити покажчик на вершину стеку на наступний елемент: head:=current^.next (рис, 10.7, б).

3. Звільнити пам'ять із-під колишньої вершини стеку:Dispose(current) (рис. 10.7,в).

Зрозуміло, що для очищення всього стеку слід повторювати кроки 1-3 доти, доки покажчик head не дорівнюватиме nil.

Приклад 10.3

У програмі ех10_3 використовується меню, за допомогою якого можна вибрати команду додавання до стеку групи елементів, або команду воображення та видалення стеку. Процедура push викликається для того, щоб додати до стеку елемент, значення якого вводить користувач. Для збереження введеного значення використовується змінна str. Вершина стеку зберігається у змінній head^, а покажчик current використовується як допоміжний. Процедура рор викликається для видалення елемента зі стеку і записує його значения до параметра-змінної valuе. Нижче, на рис. 10.8, зображено результати робота програми ех10_3.

program ex10_3;    {створення, виведення та очищенння стеку}

uses ctr;

type

     ptr=^Item;      {тип покажчика на елемент стеку}

     Item=record    {тип елемента стеку}

               data:string;   {інформаційне поле елемента}

               next:ptr;   {покажчик на наступний елемент}

            end;

var head;         {вершина стеку}

      current:ptr;   {допоміжний покажчик}

      str:string;    {значення, що додається до стеку}

      i:integer;    {параметр циклу}

      n:integer;   {кількість елементів, що додаються}

      key:char;    {номер пункту меню програми}

{============додавання елемента до стеку===============}

program push(value:string);      {параметр – значення, що додається}

begin

      new(current);   {виділити пам’ять для елемента}

      current^.data:=value;   {ініціалізувати інформаційне поле}

      current^.next:=head;     {зв’язати елементи стеку}

      head:=current;   {встановити нову вершину стеку}

end;

{=========видалети елемент зі стеку та зберегти його==========}

procedure pop(var value:string);  {параметр – змінна, значення якої буде виведене}

begin

   current:=head;   {зберегти адресу вершини стеку}

   value:=head^.data;   {зберегти значення, що виводиться}

   head:=current^.next;  {переместити вершину на другий елемент}

   dispose(current); {звільнити пам’ять}

end;

{==================основна програма=================}

begin

    clrscr;

    writeln(‘ STACK’);

    head:=nil;    {стек порожній}

    repeat          {вивести меню}

      writeln(‘1.add elements to stack’);

      writeln(‘2.output and delete stack’);

      writeln(‘3.exit’);

      writeln(‘press key 1..3’);

      key:=readkey;     {вибрати пункт меню}

      case key of

         ‘1’:begin       {додати групу елементів}

                  writeln(‘enter stack length’);

                  readln(n);

                  for i:=1 to n do

                begin

                     writeln(‘enter data item’,i);

                     readln(str);

                     push(str);    {додати елемент до стеку}

                 end;

            end;

        ‘2’:begin      {вивести та очистити стек}

               while head<>nil do

               begin

                  pop(str);   {видалити елемент зі стеку}

                  write(str, ‘ ‘); {вивести значення елемента}

              end;

              writeln;

              writeln(‘stack is empty’);

          end;

      end;

   until key=’3’;     {поки не обрано вихід із програми}

end.

4. Робота з чергою

Черта, як і стек, - це один із різновидів однозв'язного лінійного списку. Вона працює за принципом «першим прийшов - першим вийшов», що позначається абревіатурою FIFO (від англ. First In First Out), і характеризуєтъся такими властивостями:

+  елементи додаються в кінець черги;

+  елементи зчитуються та видаляються з початку (вершини) черги;

+  покажчик в останньому елементі черги дорівнює ni1;

+  неможливо отримати елемент із середини черги, не вилучивши всі елементи, що йдуть попереду.

Наведено приклади застосування черг в обчислювальний техніці. У мережній операційній системі процесор сервера обслуговує в певний момент часу тільки одного користувача. Запити інших користувачів записуються до черги. Під час обслуговування користувачів кожен запит просувається до початку черги. Перший в черзі запит підлягає «першочерговому» обслуговуванню. У комп'ютерній мережі за чергою обслуговуються інформаційні пакети. Черги застосовуються також для буферизації потоків даних, що виводяться на друк, якщо в комп'ютерній мережі використовується один принтер.

Для роботи з чергою потрібні: покажчик head на початок черги, полкажчик last на кінець черги та допоміжний покажчик current. Зауважимо, що елементи з черги видаляються за тим самим алгоритмом,  що і зі стеку, наведемо алгоритм вставки до черги нового елемента.

Алгоритм вставки елемента до черт

1. Виділити пам'ять для нового елемента черги:new(current) (рис.10.9, а)

2. Ввести дані до нового елемента: readln(current^.data) (рис 10.9, б)

3. Вважати новий елемент останнім у черзі: current^.next:=nil (рис. 10.9. в)

4. Якщо черга порожня, то ініціалізувати її вершину: head:=current.

5. Якщо черга не порожня, то зв'язати останній елемент черги із новоутвореним: last^.next:=current.

6. Вважати новий елемент черги останнім:last:=current (рис.10.9. г).

Приклад 10.4

Програма ех10_4 має структуру, подібну до структури програми ех10_3. Процедура add викликається для додавання до черги елемента, значення якого вводить користувач. Для збереження введеного значення використовується змінна str. Вершина черги зберігається у змінній head^,кінець - у змінній last^, а покажчик current є допоміжним. Процедура detel викликається для видаления елемента із черги і записує значення елемента, що видаляється, до параметра-змінної value. Результати роботи програми ех10_4 зображено на рис. 10.10.

program ex10_4;      {створення, виведення та очишення черги}

uses crt;

type

     ptr=^Item;     {тип покажчика на елемент черги}

     Item=record     {тип елемента черги}

              data:string;   {інформаційне поле елемента}

              next:ptr;       {покажчик на наступний елемент}

         end;

var head;          {покажчик на початок черги}

       current:ptr;    {допоміжний покажчик}

       last:ptr;    {покажчик на кінець черги}

       str:string;   {значення, що додається до черги}

       i:integer;   {параметр циклу}

       n:integer;   {кількість елементів черги}

       key:char;    {номер пункту меню програми}

{==============додати елемент до черги=============}

procedure add(value:string);  {параметр - значення , що додається}

begin

   new(current);    {виділити пам’ять для елемента}

   current^.data:=value;   {ініціалізувати інформаційне поле}

   current^.next:=nil;   {встановити ознаку кінця черги}

   if last=nil      {якщо створюється перший елемент}

      then      {ініціалізувати}

        head:=current  {покажчик на початок черги}

      else        {якщо новий елемент не є першим, зв’язати колишній кінець черги із новим елементом}

         last^.next:=current;

     last:=current;   {новий елемент вважати останнім}

end;

{========видалити елемент із черги, зберігши його===========}

procedure getdel(var value:string);

begin

   current:=head;   {зберегти адресу вершини черги}

   value:=head^.data;  {зберегти значення, що виводиться}

   head:=current^.next;   {переместити вершину черги на другий елемент}

   if head=nil   {якщо черга стала порожньою}

        then last:=nil;   {порожнім має стати і кінець черги}

   dispose(current);   {звільнити пам’ять}

end;

{==================основна програма=================}

begin

   clrscr;

   writeln(‘ QUEUE’);

   head:=nil;            {черга порожня}

   last:=nil;      

   repeat

       writeln(‘1.create queue’);

       writeln(‘2.output and delete queue’);

       writeln(‘3.exit’);

       writeln(‘press key 1..3’);

       key:=readkey;

       case key of

         ‘1’:begin           {додати елемент до черги}

                writeln(‘enter queue length’);

                readln(n);

                for i:=1 to n do

                begin

                writeln(‘enter data item’, i);

                readln(str);

                add(str);

            end;

      end;

  ‘2’:begin           {вивести та видалити елемент}

           write head<>nil do

           begin

               getdel(str);

               write(str, ‘ ‘);

            end;

            writeln;

            writeln(‘queue is empty’);

        end;

   end

   until key=’3’;

end.

5. Робота з лінійним списком

Розглянуті у попередніх двох розділах стек і черга є лінійним списком, множина допустимих операцій над якими обмежена операція над першим або останнім елементом. У даному розділі обговорюватимуться списки, над якими припустимі довільні дії. Найбільш ефективно у спискових структурах реалізуються операції вставки та видалення елементів, оскільки вони, на відміну від операцій видалення та вставки елементів масиву, не потребують зсуву групи елементів. Наведемо всі можливі вартанти застосування цих двох операцій:

створення списку, тобто внесення першого елемента до списку;

додавання елемента в кінець списку;

додавання елемента на початок списку;

вставка елемента в середину списку;

видалеяня елемента з початку списку;

видалення елемента з кінця списку;

видалення елемента з середини списку.

У загальному випадку для роботи з однозв'язним лінійним списком потрібні такі покажчики: покажчик head на початок списку; покажчик current на поточний елемент списку; покажчик privious на елемент, розташований перед поточним; покажчик newptr на елемент, що додається до списку, та покажчик last на кінець списку. Зауважимо, що у розв'язання конкретних задач можуть використовуватися не всі такі покажчики. Зокрема, у наведеному нижче приклада 10.5 зайвим виявиться покажчик last.

Отже, розглянемо алгоритми основних операцій над однозв'язним лінійним списком. Нагадаємо, що кожний елемент однозв'язного списку можна реалізувати записом Item, оголошення якого наведена в розділі 10.2.1. Додавання елемента в кінець списку виконується за алгоритмом додавання елемента до черги, а дода вання елемента на початок списку — за алгоритмом додавання елемента до стеку. Ці операції вже розглядалися в двох попередіх розділах.

Так само вже розглядалася і операція видалення елемента з початку списку що здійснюеться за алгоритмом видалення елемента зі стеку або з черги. Запишемо алгоритми решти операцій, припускаючи, що при додаванні елемента для нього вже була створена динамічна змінна newptr^ та було введене значення у його поле data.

Алгоритм створення одноелементного списку

1. Ініціалізувати початок списку: head:=newptr.

2. Ініціалізувати кінець списку: last:=newptr.

3. Записати ознаку того, що перший елемент є останнім: head^.next: =nil.

  Алгоритм вставки елемента всередину списку

Вважаемо, що новий елемент має бути вставлений між елементами previous^ i current (рис. 10.11).

1. Новий елемент вважати наступним для previous^:previous^.next:=newptr.

2. Елемент current вважати наступним для нового елемента: newptr^.next:=current.

Алгоритм видалення елемента зсередини списку

Вважаємо, що видаляєтъся елемент current^ розташований безпосередньо за елементом previous^ (рис.10.12).

1. Вважати, що за елементом previos буде розташований той елемент, що раніше знаходився за елементом current^:previous^.next:=current^.next;

2. Звільнити пам'ять із-під елемента current^:Dispose(current);

Алгоритм видалення елемента з кінця списку

Вважаемо, що на передостанній елемент посилається покажчнк previous.

1. Записати до передостаннього елемента ознаку кінця списку: previous^.next:=nil.

2. Звільнити пам'ять із-під колишнього останнього елемента: Dispose(last).

3. Вважати останнім колишній передостанній елемент:last:=previous.

Приклад 10.5

Розробимо програлгу обробки впорядкованого за алфавітом списку слів. Вважаємо, що користувач може додавати та вилучати слова зі списку і при цьому- список має залишатися впорядкованим. Вилучення відбувається так: користувач вводить деяке слово, а програма шукає це слово у списку. Якщо слово знайдене, програма його вилучає, якщо ні - видає повідомлення про безрезультатість пошуку.

Алгоритм робота з алфатним переліком слів

1. Вважати список порожнім.

2. Вивести меню для роботи зі списком.

3. Якщо натиснута клавиша I, додати елемент до списку.

3.1. Виділити пам'ять для нового елемента.

3.2. Ввести нове слово та ініціалізувати ним поле даних нового елемента.

3.3. Якщо список порожній, вважати щойно утворений елемент списком.

3.4. Якщо список непорожній, визначити місце розташування нового елемента та вставити його до списку.

4. Якщо натиснута клавіша D, видалити елемент зі списку.

4.1. Ввести слово, що видаляється.

4.2. Якщо список порожній, вивести відповідне повідомлення.

4.3. Якщо список непорожній, проглядати значення елементів списку доти доки введене слово не буде знайдено або доки список не буде вичерпано

4.4. Якщо елемент із введеним значениям поля даних було знайдено, то його слід видалити.

4.5. Якщо введене слово не збігається зі значенням інформаційного поля жодного елемента списку, вивести повідомлення про відсутністъ шуканого елемента у списку.

5. Якщо натиснута клавіша Q, вийти з програми.

Програма ех10_5 реалізує розглянутий алгоритм. Крім процедур вставки та видалення елементів, на увагу в цій програмі заслуговують функція SearchPlaceDelete, що виконує пошук введеного слова у списку, та процедура SearchPlaceInsert, яка відшукує позицію для вставки нового елемента. В обох цих підпрограмах здійснюється послідовний перебор елементів списку, під час якого шляхом циклічного виконання присвоєння current:=current^.next змінюється значення покажчика current. Оскільки елемент, на який посилається покажчик previous, має бути попереднім для елемента, що на нього посилається current, то перш ніж змінна current набуде нового значения, її старе значення має бути збережене у змінній previous.

program ex10_5;   {створити впорядкований список, передбачити операції додавання, видалення та виведення елементів на екран}

uses  ctr;

type

   ptr=^Item;   {тип покажчика на елемент}

   Item=record   {тип елемента списку}

           data:string;  {інформаційне поле}

           next:ptr;    {поакжчик на наступний елемент}

        end;

var head:ptr;    {покажчик на початок списку}

     newptr,     {покажчик на елемент, що вводиться}

     current,     {покажчик на поточний елемент}

     previous: ptr;  {покажчик на попередній елемент}

     ch:char;    {код дії над елементом списку}

     str:string;    {значення елемента, що вводиться}

     flag: boolean;   {ознака успішності пошуку}

{===========створення одноелементного списку=============}

procedure CreateFirstItem;

begin

     head:=newptr;   {покажчик на вершину списку переместити на перший елемент}

     head^.next:=nil;   {покажчик на наступний елемент має значення nil}

end;

{=========вставка елемента на початок списку==============}

procedure IsertInBeginning;

begin

   newptr^.next:=head;     {зв’язати новий елемент з вершиною списку}

   head:=newptr;      {переместити вершину списку на елемент, що додається}

end;

{=====================пошук позиції вставки==============}

procedure SearchPlaseInsert;

begin           {поточний покажчик на початок списку}

     current:=head;

     repead    {покажчик на попередній елемент}

           previous:=current;   {покажчик на наступний елемент}

           current:=current^.next;

           if current=nil then   {якщо кінець списку}

                flag:=true    {ознака закінчення пошуку}

             else    {якщо список не закінчився}

                flag:=current^.data>=str;    {ознака продовження пошуку}

     unit flag;

end;

{===========вставка елемента в середину списку============}

procedure InsertIntoMiddle;

begin

  previous^.next:=newptr;   {зв’язок перешого і нового елемента}

end;

{=================додання слова до списку=================}

procedure insert;

begin

   write(‘input element:’);

   readln(str);    {ввести значення елемента}

   new(newptr);        {виділити пам’ять для елемента}

   newptr^.data:=str;   {занести значення в пам’ять}

   if head=nil then   {якщо список порожній}

       CreateFirstItem   {формувати перший елемент списку}

   else        {якщо у списку є елементи}

      if str<=head^.data     {якщо значення нового елемента менше за значення першого елемента}

          then IsertInBeginning    {вставити елемент на початку списку}

          else      {якщо значення нового елемента більше за значення першого елемента}

          begin

             SearchPlaceInsert;    {пошук місця вставки}

             InsertIntoMiddle;    {вставка елемента}

       end;

end;

{===============видалення першого елемента==============}

procedure DelFirst;

begin

    head:=current^.next;    {вершину списку перенести на наступний елемент}

    dispose(current);        {звільнити пам’ть}

end;

{============пошук елемента для видалення================}

function SerchPlaceDelete:boolean;

begin

  repeat

     previous:=current;   {переміщення покажчика від}

     current:=current^.next    {попереднього до початкового елемента, доки не буде знайдено потрібний                                елемент або кінець списку}

     until(current^.data=str) or (current^.next=nil);

     SearchPlaceDelete:=current^.data=str;

end;

{=============видалення елемента з середини списку=========}

procedure DelMiddle;

begin

  previous^.next:=current^.next;

  dispose(current);       {звільнити пам’ять}

end;

{================видалення слова зі списку===============}

procedure delete;

begin

   if head=nil then    {якщо список порожній}

                                {вивести повідомлення}

begin

  writeln(‘List is empty.Press ENTER…’);

  readln;

end

else     {якщо список має елементи}

begin

  write(‘input value:’);

  readln(str);      {ввести слово, що видаляється}

  current:=head;    {покажчик на початку списку}

  if current^.data=str    {шуканий елемент є першим}

     then DelFirst     {видалити перший елемент}

     else    {шуканий елемент не перший}

       if SearchPlaceDelete   {якщо слово знайдено}

          then DelMiddle   {видалити елемент із середини списку}

          else        {якщо слово не знайдене}

          begin   {вивести повідомлення}

             write(str,’not found in list.’);

             writeln(‘Press ENTER…’);

             readln;

          end;

     end;

end;

{==================виведення списку=================}

procedure outlist;

begin

  current:=head;      {початок списку}

  if current=nil then   {якщо список порожній}

     writeln(‘List is empty’)     {вивести повідомлення}

  else                    {якщо список має елементи}

      begin

         writeln(‘output list: ’);

         repeat      {вивести значення елемента}

            write(current^.data,‘ ’);

            current:=current^.next;   {переместити покажчик на наступний елемент}

      until current=nil;     {доки не закінчиться список}

   end;

 writeln;

end;

{================основна програма===================}

begin

  head:=nil;   {список порожній}

  clrscr;

  repeat

     outlist;     {вивести список}

     writeln;     {меню програми}

     writeln;

     writeln(‘enter command: i – input   d – delete    q – quit ’);

     ch:=readkey;

     case ch of

     ‘i’:insert;    {вставити елемент у список}

     ‘d’:delete;  {видалити елемент зі списку}

   end;

 until ch=’q’;   {вийти з програми}

end.

Контрольні питання

1. Спискові структури даних

2. Визначення лінійного списку та його різновидів

3. Робота зі стеком

4. Робота з чергою

5. Робота з лінійним списком


 

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

64986. МОНГОЛЬСКАЯ МОНЕТНО-ВЕСОВАЯ СИСТЕМА И РАЦИО В СРЕДНЕЙ АЗИИ XIII ВЕКА 65.5 KB
  Решению данной проблемы и посвящено настоящее сообщение. Существенную помощь в ее рассмотрении оказал анализ монет клада XIII в. из Отрара, опубликованного К.М. Байпаковым и В.Н. Настичем. В этой работе проанализированы только метрологические характеристики монет Алмалыка.
64987. ОЧЕРКИ ПО НУМИЗМАТИКЕ МОНГОЛЬСКИХ ГОСУДАРСТВ XIII – XIV ВЕКОВ 81.5 KB
  В работе представлена и использована методика анализа метрологических характеристик монет приведено каталожное описание большого числа памятников нумизматики монгольского времени с уточненной атрибуцией. Особое внимание уделено проблеме общности истоков и динамики развития монетных систем и денежного обращения в...
64988. Монгольская концепция родства как фактор отношений с русскими князьями: социальные практики и культурный контекст 269 KB
  Любую социокультурную систему можно рассматривать с двух противоположных методологических позиций. Одна из них умышленно дистанцируется от своего объекта изучения, рассматривает его как бы извне, путём последовательных абстракций или дедуктивных умозаключений пытаясь поместить его в рамки общей концептуальной схемы...
64989. Письмо золотоордынского хана Ахмеда турецкому султану Фатих Мехмеду 72.5 KB
  Письмо Ахмед ибн Мухаммеда меньше по размерам и без соответствующего данному типу ханских писем. Лишь после знакомства с текстом письма можно установить что оно принадлежит золотоордынскому хану Ахмед ибн Мухаммед ибн Тимуру.
64991. ПРОБЛЕМЫ АРХЕОЛОГИИ ЗОЛОТОЙ ОРДЫ 35.5 KB
  Цель спецкурса: на основе анализа археологических материалов познакомить слушателей с основными аспектами истории культуры зоны степей между Иртышом и Дунаем в монгольскую эпоху. Курс охватывает период между...
64993. Родословные легендарных потомков Огуз-кагана по спискам Махмуда Кашгари, Рашид ад-Дина и Абу-л-Гази хана Хивинского 55 KB
  В древности слова туркмен (туркман) не было; все кочевые племена, по внешнему виду похожие на тюрков, называли обобщено тюрками, но у каждого племени было определенное имя и прозвище. В то время когда эти племена Огуза пришли из своих областей в страны Мавераннахра...