Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КонспектЛекций Т Алгоритмов.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
480.26 Кб
Скачать

3.3. Списки.

Список – це лінійна зв'язана структура даних, в якій додавати та видаляти дані можна в будь-якому місці.

Списки можуть бути несортованими і сортованими.

Елемент списку має вид:

struct node

{ float num //ключове поле

//інформаційні поля

node *next; // покажчик на слідуючий елемент

};

Приклад.

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

Позначення:

head – покажчик на вершину(голову) списку;

n – кількість елементів списку;

what – значення елементу списку, що вводиться;

toList – функція додавання елементу до сортованого списку;

printList – функція виведення на екран елементів сортованого списку;

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

Блок-схема програми

Текст програми.

#include <iostream.h>

struct node

{

int num;

node *next;

};

// прототипи функцій

node* toList(node* ,int);

node* fromList(node*, int );

void printList(node*);

void main()

{

int what,i,n;

node *head=0;

cout<<"input n=";

cin>>n;

cout<<endl;

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

cout<<"input all what"<<endl;

for (i=1;i<=n;i++)

{

cin>>what;

head= toList(head ,what);

}

// виведення на екран елементів списку

printList(head);

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

cout<<"InputWhatFromList:"<<endl;

cin>>what;

head=fromList(head,what);

printList(head);

}

node* toList(node* head ,int num)

{

node* pv=new node;

pv->num=num;

pv->next=0;

if (head)

{

node* cur=0;

if(head->num> pv->num)

{

pv->next=head;

head=pv;

}

else

{

cur=head;

while((cur->next) && (cur->next->num < pv->num))

cur=cur->next;

pv->next=cur->next;

cur->next=pv;

}

}

else

head=pv;

return head;

}

node* fromList(node* head, int num)

{

int prdel;

node* erased=0;

node* cur=0;

node* buf=new node;

buf->num=num;

buf->next=0;

if (( head->num) == (buf->num))

{

erased=head;

head=head->next;

delete erased;

}

else

{

cur=head;

erased=cur->next;

prdel=0;

do

{

if ( buf->num==erased->num)

{

cur->next=erased->next;

delete erased;

prdel=1;

}

else

{

cur=erased;

erased=cur->next;

}

}

while ((prdel==0) ||(erased != 0));

}

return head;

}

void printList(node* pv)

{

if (!pv)

cout<<"List is nil\n";

else

while(pv)

{

cout<<"="<<pv->num<<endl;

pv=pv->next;

}

}

3.4. Черги.

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

FIFO- First - In- First Out (першим увійшов - першим вийшов)/

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

Елемент черги має вигляд:

struct node

{ float num //ключове поле

//інформаційні поля

node *next; // покажчик на слідуючий елемент

};

Приклад.

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