Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Связанные структуры.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
151 Кб
Скачать

15

Связанные структуры

Если программа должна работать с фиксированным числом экземпляров одного типа структуры, то объявляется массив структур.

Если заранее не известно, сколько будет структур, можно пользоваться связанными структурами, в которых каждая отдельная структура связана с помощью указателей с соседней или с соседними.

То есть

- количество элементов не известно – статический массив не подходит;

- количество элементов определяется только в конце работы – динамический массив не подходит.

Рассмотрим линейные связанные структуры.

  1. Все элементы связанных структур представляют собой последовательность элементов, связанных в цепь посредством указателей.

2) ОП для элементов выделяется и освобождается динамическая (newdelete или mallocfree )

  1. последовательность элементов имеет вершину(начало) и хвост (конец).

К линейным связанным структурам относятся стеки, очереди, списки, и т. д., включение и исключение элементов в которых происходит по-разному:

  1. в стеке включение и исключение происходит только с одного конца – с вершины стека;

  2. в очереди включение происходит в хвосте цепи (конец очереди), а исключение происходит с вершины цепи (начало очереди);

  3. в списке включение и исключение элементов происходит по-разному, например, если элементы списка упорядочены по определенному признаку (одному из полей структуры), включение и исключение происходит в любом месте цепи, так чтобы не нарушать порядок списка.

Элемент связанной структуры должен состоять из данного в обычном понимании и из ссылочного элемента (указателя), посредством которого будет осуществляться связь с другими элементами

Стек

Стек – это связанная структура данных, в которой добавлять, удалять и читать данные можно только с одного конца, т.е. доступен только элемент, добавленный в стек последним.

Стек – это организация данных, в которой элемент, поступивший в стек последним извлекается первым.

Все действия происходят с вершинным элементом.

новый элемент вершина стека хвост стека

data next

data next

data next

data next

data next

0

s-указатель на вершину до включения

stnew ->next= s

s= stnew -указатель на вершину после включения.

Рассмотрим функции

  1. включения нового элемента

  2. исключения элемента

  3. считывание данных с вершины стека

//Функция дополнения стека:

#include <iostream>

using namespace std;

struct stack { int data; stack * next ; }//узел стека

stack * beg; // указатель на вершину стека – глобальный

//-------------------------------------------------------------------------------

//Функция дополнения стека:

void dop ( stack*&s, int dat ) // cссылка на указатель для передачи

// адреса вершины стека и данные для нового элемента

/*адрес вершины стека будет меняться в функции дополнения, поэтому указатель на вершину-глобальная переменная будет передаваться в функцию по ссылке, в нее и будут записываться все изменения адреса вершины*/

{

stack * stnew; // указатель на новый элемент стека

stnew = new ( stack) ; // выделение памяти под новый элемент

stnew ->data = dat; // размещение информации в новый элемент

stnew->next=s; //“указывает” на бывшую вершину стека

s = stnew; // указатель на вершину –это указатель на новый элемент

} //новый элемент стал вершиной стека.

//---------------------------------------------------------------------------------

//Функция дополнения стека с клавиатуры: