Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnyk_C.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.61 Mб
Скачать

Int main(void)

{

int i;

struct pidpr dano[6]={{1, " Харківтрансгаз ", 36.40},

{2, " Прикарпаттрансгаз ", 22.15},

{3, " Київтрансгаз ", 75.00},

{4, " Львiвтрансгаз ", 42.12},

{5, " Експорттрансгаз ", 1.85},

{6, " Гадячгазпром ", 12.48}};

struct pidpr *head, *curr;

clrscr();

puts("Створення черги:");

head=curr=malloc(sizeof(struct pidpr));

for(i=0;i<6;i++)

{

curr->kod=dano[i].kod;

curr->stf=dano[i].stf;

strcpy(curr->naz,dano[i].naz);

if(i<5)curr->dali=malloc(sizeof(struct pidpr));

else curr->dali=NULL;

printf("curr=%p kod=%d naz=%s stf=%5.2f dali=%p\n",

curr,curr->kod, curr->naz,curr->stf,curr->dali);

curr=curr->dali;

}

puts("\nВивід черги:");

curr=head;

while(curr != NULL)

{

printf("curr=%p kod=%d naz=%s stf=%5.2f dali=%p\n",

curr,curr->kod, curr->naz,curr->stf,curr->dali);

free(curr);

curr=curr->dali;

}

getch();

return 0;

}

Створення черги:

curr=0C64 kod=1 naz=Харківтрансгаз stf=36.40 dali=0C94

curr=0C94 kod=2 naz=Прикарпаттрансгаз stf= 22.15 dali=0CC4

curr=0CС4 kod=3 naz=Київтрансгаз stf=75.00 dali=0CF4

curr=0CF4 kod=4 naz=Львiвтрансгаз stf=42.12 dali=0C24

curr=0D24 kod=5 naz=Експорттрансгаз stf= 1.85 dali=0D54

curr=0D54 kod=6 naz=Гадячгазпром stf=12.48 dali=0000

Вивід черги:

curr=0C64 kod=1 naz=Харківтрансгаз stf=36.40 dali=0C94

curr=0C94 kod=2 naz=Прикарпаттрансгаз stf= 22.15 dali=0CC4

curr=0CС4 kod=3 naz=Київтрансгаз stf=75.00 dali=0CF4

curr=0CF4 kod=4 naz=Львiвтрансгаз stf=42.12 dali=0C24

curr=0D24 kod=5 naz=Експорттрансгаз stf= 1.85 dali=0D54

curr=0D54 kod=6 naz=Гадячгазпром stf=12.48 dali=0000

Різновидом черги є дек, який являє собою двосторонньозв’язану чергу. У деку структура pidpr буде мати ще одну додаткову адресу, яка забезпечить читання черги від кінця до початку. Таким чином, дек дозволяє елементам черги проходити від першого до останнього (перший прийшов – перший обслужений) або навпаки (останній прийшов – перший обслужений).

Запитання для перевірки

  1. Що таке зв’язаний список? Чи можна назвати його типом даних?

  2. Які переваги має зв’язаний список перед масивом?

  3. Перелічіть та поясніть види зв’язаних списків.

  4. Яким чином зв’язуються між собою дані у зв’язаному списку?

  5. Що таке прямий та послідовний доступи до даних у зв’язаному списку?

  6. Поясніть виконані вище в програмах операції над даними зв’язаного списку.

  7. Чи можна додати до зв’язаного списку за один раз (за один сеанс виділення пам’яті) декілька різних структур? Як можна тоді їх використовувати в програмах та звертатися до кожної з них?

  8. Чи можна прочитати зв’язаний список не від початку до кінця, як це було зроблено у вищенаведених прикладах, а навпаки – від кінця до початку?

  9. Чи обов’язково потрібно звільняти пам’ять, зайняту зв’язанним списком? Що станеться, якщо цього не робити?

  10. Запропонуйте алгоритм вставки в список структури не перед поточною, як це зроблено в вищенаведеному прикладі, а за нею.

  11. Додайте до програми прикладу 11.1 обробку виняткової ситуації – попередження аварійного її завершення через відсутність вільної ділянки оперативної пам’яті.

  12. Чому використання зв’язаного списку може спричинити фрагментацію пам’яті?

  13. Чим відрізняються стек та черга від зв’язаного списку?

  14. Чи можна чергу використовувати як зв’язаний список?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]