Связные списки. Очередь

Содержание

Слайд 2

Очередь –линейный список, организованный по принципу первый пришел – последний ушел (FIFO

Очередь –линейный список, организованный по принципу первый пришел – последний ушел (FIFO
– first in first out).
Бывает однонаправленная и двунаправленная
Голова (вершина) очереди – самый верхний элемент
Хвост (конец) очереди – самый нижний (последний) элемент
Добавление новых элементов допустимо только с хвоста очереди.
Удаление существующих элементов допустимо только с головы очереди

Очередь

Слайд 3

Однонапрвленная
struct FIFO {
int data;
struct FIFO *next;
};
Двунаправленная
struct FIFO {
int data;

Однонапрвленная struct FIFO { int data; struct FIFO *next; }; Двунаправленная struct
struct FIFO *next;
struct FIFO *prev;
};

Очередь

Слайд 4

Добавление
Удаление
Неразрушающий просмотр

Очередь

Добавление Удаление Неразрушающий просмотр Очередь

Слайд 5

Создать временный указатель
Выделить место
Записать данные в информационное поле
Указатель next сделать NULL
Проверить

Создать временный указатель Выделить место Записать данные в информационное поле Указатель next
хвост
Если NULL
Хвост=временный указатель
Иначе
Хвост->Next = временный указатель
Хвост = временный указатель
Вернуть голову

Добавление

Слайд 6

struct FIFO * create(struct FIFO *tail, int x)
{
struct FIFO *n;
n =

struct FIFO * create(struct FIFO *tail, int x) { struct FIFO *n;
(struct FIFO *)malloc(sizeof(struct FIFO));
n->next = NULL;
n->data = x;
if (tail == NULL)
{
tail= n;
}
else
{
tail->next=n;
tail=n;
}
return tail;
}

Добавление

Слайд 7

void create(struct FIFO **head, struct FIFO **tail, int x) {
struct FIFO *n;

void create(struct FIFO **head, struct FIFO **tail, int x) { struct FIFO

n = (struct FIFO *)malloc(sizeof(struct FIFO));
n->next = NULL;
n->data = x;
if (*head == NULL)
{
*head = n;
*tail = n;
}
else
{
(*tail)->next=n;
*tail=n;
}
}

Добавление

Слайд 8

Если голова не NULL
Голова = голова ->next;
Вернуть голову
Иначе
Вернуть NULL

Удаление

Если голова не NULL Голова = голова ->next; Вернуть голову Иначе Вернуть NULL Удаление

Слайд 9

struct FIFO *pop(struct FIFO * head)
{
if (head != NULL)
{
head = head->next;
return head;
}
else

struct FIFO *pop(struct FIFO * head) { if (head != NULL) {
return NULL;
}

Удаление

Слайд 10

void pop(struct FIFO **head, struct FIFO ** tail)
{
if (*head != NULL)
{
*head =

void pop(struct FIFO **head, struct FIFO ** tail) { if (*head !=
(*head)->next;
}
else
{
*tail=NULL;
}
}

Удаление

Слайд 11

Создать временный указатель
Временный указатель = голова
Пока временный указатель не равен NULL
Вывод на

Создать временный указатель Временный указатель = голова Пока временный указатель не равен
экран информационного поля временного указателя
Передвинуть временный указатель на следующий элемент

Просмотр

Слайд 12

struct FIFO *p = head;
while (p != NULL)
{
printf("%d -->", p->data);
p

struct FIFO *p = head; while (p != NULL) { printf("%d -->",
= p->next;
}

Просмотр

Слайд 13

Создать очередь из натуральных чисел до N. Вывести на экран.

Пример 1

Создать очередь из натуральных чисел до N. Вывести на экран. Пример 1

Слайд 14

Создать очередь из чисел введенных пользователем. Вывести на экран.
Посчитать сумму элементов

Пример 2

Создать очередь из чисел введенных пользователем. Вывести на экран. Посчитать сумму элементов Пример 2

Слайд 15

Создать очередь из чисел введенных пользователем. Вывести на экран. Удалить первые K

Создать очередь из чисел введенных пользователем. Вывести на экран. Удалить первые K чисел Пример 3
чисел

Пример 3

Слайд 16

Найти максимальное значение в очереди. Удалить все элементы до/после него

Пример 4

Найти максимальное значение в очереди. Удалить все элементы до/после него Пример 4

Слайд 17

struct FIFO {
int data;
struct FIFO *next;
struct FIFO *prev;
};

Очередь двунаправленная

struct FIFO { int data; struct FIFO *next; struct FIFO *prev; }; Очередь двунаправленная

Слайд 18

Добавление
Удаление
Неразрушающий просмотр

Очередь двунаправленная

Добавление Удаление Неразрушающий просмотр Очередь двунаправленная

Слайд 19

Создать временный указатель tmp
Выделить место
Записать данные в информационное поле
Указатель tmp->next сделать NULL
Указатель

Создать временный указатель tmp Выделить место Записать данные в информационное поле Указатель
tmp->prev сделать NULL
Проверить хвост
Если NULL
Хвост=временный указатель
Иначе
tmp->prev = хвост
Хвост->Next = tmp
хвост = tmp
Вернуть хвост

Добавление

Слайд 20

struct FIFO * create(struct FIFO *tail, int x)
{
struct FIFO *n;
n =

struct FIFO * create(struct FIFO *tail, int x) { struct FIFO *n;
(struct FIFO *)malloc(sizeof(struct FIFO));
n->next = NULL;
n->prev = NULL;
n->data = x;
if (tail == NULL)
{
tail= n;
}
else
{
n->prev=tail;
tail->next=n;
tail=n;
}
return tail;
}

Добавление

Слайд 21

void create(struct FIFO **head, struct FIFO **tail, int x) {
struct FIFO *n;

void create(struct FIFO **head, struct FIFO **tail, int x) { struct FIFO

n = (struct FIFO *)malloc(sizeof(struct FIFO));
n->next = NULL;
n->prev = NULL;
n->data = x;
if (*head == NULL)
{
*head = n;
*tail = n;
}
else
{
n->prev=(*tail);
(*tail)->next=n;
*tail=n;
}
}

Добавление

Слайд 22

Удаление только с головы!
Если голова не NULL
голова = голова ->next;
голова->prev =NULL;
Вернуть голову
Иначе

Удаление только с головы! Если голова не NULL голова = голова ->next;

Вернуть NULL

Удаление

Слайд 23

struct FIFO *pop(struct FIFO * head)
{
if (head != NULL)
{
head = head->next;
head->prev=NULL;
return head;
}
else

struct FIFO *pop(struct FIFO * head) { if (head != NULL) {
return NULL;
}

Удаление

Слайд 24

void pop(struct FIFO **head, struct FIFO ** tail)
{
if (*head != NULL)
{
*head =

void pop(struct FIFO **head, struct FIFO ** tail) { if (*head !=
(*head)->next;
(*head)->prev=NULL;
}
else
{
*tail=NULL;
}
}

Удаление

Слайд 25

С головы:
Создать временный указатель
Временный указатель = голова
Пока временный указатель не равен NULL
Вывод

С головы: Создать временный указатель Временный указатель = голова Пока временный указатель
на экран информационного поля временного указателя
Передвинуть временный указатель на следующий элемент
С хвоста:
Создать временный указатель
Временный указатель = хвост
Пока временный указатель не равен NULL
Вывод на экран информационного поля временного указателя
Передвинуть временный указатель на предыдущий элемент

Просмотр

Слайд 26

struct FIFO *p = head;
while (p != NULL)
{
printf("%d -->", p->data);
p

struct FIFO *p = head; while (p != NULL) { printf("%d -->",
= p->next;
}
struct FIFO *p = tail;
while (p != NULL)
{
printf("%d -->", p->data);
p = p->prev;
}

Просмотр

Слайд 27

Создать двунаправленную очередь из натуральных чисел до N. Вывести на экран.

Пример 5

Создать двунаправленную очередь из натуральных чисел до N. Вывести на экран. Пример 5
Имя файла: Связные-списки.-Очередь.pptx
Количество просмотров: 34
Количество скачиваний: 0