🗊Презентация Динамические структуры данных

Нажмите для полного просмотра!
Динамические структуры данных, слайд №1Динамические структуры данных, слайд №2Динамические структуры данных, слайд №3Динамические структуры данных, слайд №4Динамические структуры данных, слайд №5Динамические структуры данных, слайд №6Динамические структуры данных, слайд №7Динамические структуры данных, слайд №8Динамические структуры данных, слайд №9Динамические структуры данных, слайд №10Динамические структуры данных, слайд №11Динамические структуры данных, слайд №12Динамические структуры данных, слайд №13Динамические структуры данных, слайд №14Динамические структуры данных, слайд №15Динамические структуры данных, слайд №16Динамические структуры данных, слайд №17Динамические структуры данных, слайд №18Динамические структуры данных, слайд №19Динамические структуры данных, слайд №20Динамические структуры данных, слайд №21Динамические структуры данных, слайд №22Динамические структуры данных, слайд №23Динамические структуры данных, слайд №24Динамические структуры данных, слайд №25Динамические структуры данных, слайд №26Динамические структуры данных, слайд №27Динамические структуры данных, слайд №28Динамические структуры данных, слайд №29Динамические структуры данных, слайд №30Динамические структуры данных, слайд №31Динамические структуры данных, слайд №32Динамические структуры данных, слайд №33Динамические структуры данных, слайд №34Динамические структуры данных, слайд №35Динамические структуры данных, слайд №36Динамические структуры данных, слайд №37Динамические структуры данных, слайд №38Динамические структуры данных, слайд №39Динамические структуры данных, слайд №40Динамические структуры данных, слайд №41Динамические структуры данных, слайд №42Динамические структуры данных, слайд №43Динамические структуры данных, слайд №44Динамические структуры данных, слайд №45

Содержание

Вы можете ознакомиться и скачать презентацию на тему Динамические структуры данных. Доклад-сообщение содержит 45 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Динамические 
структуры данных
Описание слайда:
Динамические структуры данных

Слайд 2





Динамические структуры данных – это структуры данных, память под которые выделяется и освобождается по мере необходимости.
Динамические структуры данных – это структуры данных, память под которые выделяется и освобождается по мере необходимости.
Используется  динамическое распределение памяти. 
Каждой динамической структуре данных сопоставляется статическая переменная типа указатель (ее значение – адрес этого объекта), посредством которой осуществляется доступ к динамической структуре.
Порядок работы с динамическими структурами данных следующий:
создать (отвести место в динамической памяти);
работать при помощи указателя;
удалить (освободить занятое структурой место).
Описание слайда:
Динамические структуры данных – это структуры данных, память под которые выделяется и освобождается по мере необходимости. Динамические структуры данных – это структуры данных, память под которые выделяется и освобождается по мере необходимости. Используется  динамическое распределение памяти.  Каждой динамической структуре данных сопоставляется статическая переменная типа указатель (ее значение – адрес этого объекта), посредством которой осуществляется доступ к динамической структуре. Порядок работы с динамическими структурами данных следующий: создать (отвести место в динамической памяти); работать при помощи указателя; удалить (освободить занятое структурой место).

Слайд 3





Классификация динамических структур данных
Классификация динамических структур данных
Списки (односвязные, двусвязные, циклические);
Стек;
Дек;
Очередь;
Деревья;
Графы.
Они отличаются способом связи отдельных элементов и/или допустимыми операциями.
Описание слайда:
Классификация динамических структур данных Классификация динамических структур данных Списки (односвязные, двусвязные, циклические); Стек; Дек; Очередь; Деревья; Графы. Они отличаются способом связи отдельных элементов и/или допустимыми операциями.

Слайд 4


Динамические структуры данных, слайд №4
Описание слайда:

Слайд 5





Объявление элемента динамической структуры данных :
Объявление элемента динамической структуры данных :
struct имя_типа { информационное поле; адресное поле; };
Например:
struct TNode { int Data;//информационное поле 
	TNode *Next;//адресное поле };
Информационных и адресных полей может быть как одно, так и несколько.
Описание слайда:
Объявление элемента динамической структуры данных : Объявление элемента динамической структуры данных : struct имя_типа { информационное поле; адресное поле; }; Например: struct TNode { int Data;//информационное поле TNode *Next;//адресное поле }; Информационных и адресных полей может быть как одно, так и несколько.

Слайд 6





Для обращения к динамической структуре достаточно хранить в памяти адрес первого элемента структуры. 
Для обращения к динамической структуре достаточно хранить в памяти адрес первого элемента структуры. 
Поскольку каждый элемент динамической структуры хранит адрес следующего за ним элемента, можно, двигаясь от начального элемента по адресам, получить доступ к любому элементу данной структуры.
Доступ к данным в динамических структурах осуществляется с помощью операции "стрелка" ( -> ), которую называют операцией косвенного выбора элемента структурного объекта, адресуемого указателем. 

Формат применения :
УказательНаСтруктуру-> ИмяЭлемента
Описание слайда:
Для обращения к динамической структуре достаточно хранить в памяти адрес первого элемента структуры. Для обращения к динамической структуре достаточно хранить в памяти адрес первого элемента структуры. Поскольку каждый элемент динамической структуры хранит адрес следующего за ним элемента, можно, двигаясь от начального элемента по адресам, получить доступ к любому элементу данной структуры. Доступ к данным в динамических структурах осуществляется с помощью операции "стрелка" ( -> ), которую называют операцией косвенного выбора элемента структурного объекта, адресуемого указателем. Формат применения : УказательНаСтруктуру-> ИмяЭлемента

Слайд 7





Операции "стрелка" ( -> ) двуместная. 
Операции "стрелка" ( -> ) двуместная. 
Применяется для доступа к элементу, задаваемому правым операндом, той структуры, которую адресует левый операнд.
 В качестве левого операнда должен быть указатель на структуру, а в качестве правого – имя элемента этой структуры.
Например:
p->Data; p->Next;
Описание слайда:
Операции "стрелка" ( -> ) двуместная. Операции "стрелка" ( -> ) двуместная. Применяется для доступа к элементу, задаваемому правым операндом, той структуры, которую адресует левый операнд. В качестве левого операнда должен быть указатель на структуру, а в качестве правого – имя элемента этой структуры. Например: p->Data; p->Next;

Слайд 8


Динамические структуры данных, слайд №8
Описание слайда:

Слайд 9


Динамические структуры данных, слайд №9
Описание слайда:

Слайд 10


Динамические структуры данных, слайд №10
Описание слайда:

Слайд 11





Работа с памятью при использовании динамических структур
Работа с памятью при использовании динамических структур
В программах, в которых необходимо использовать динамические структуры данных, работа с памятью происходит стандартным образом. 
Выделение динамической памяти производится с помощью операции new или с помощью библиотечной функции malloc (calloc). 
Освобождение динамической памяти осуществляется операцией delete или функцией free.
Описание слайда:
Работа с памятью при использовании динамических структур Работа с памятью при использовании динамических структур В программах, в которых необходимо использовать динамические структуры данных, работа с памятью происходит стандартным образом. Выделение динамической памяти производится с помощью операции new или с помощью библиотечной функции malloc (calloc). Освобождение динамической памяти осуществляется операцией delete или функцией free.

Слайд 12





Например, объявим динамическую структуру данных с именем Node с полями Name, Value и Next, выделим память под указатель на структуру, присвоим значения элементам структуры и освободим память.
Например, объявим динамическую структуру данных с именем Node с полями Name, Value и Next, выделим память под указатель на структуру, присвоим значения элементам структуры и освободим память.
struct Node {char *Name;
             int Value;
             Node *Next
            };
Node *PNode; //объявляется указатель
PNode = new Node; //выделяется память
PNode->Name = "STO"; //присваиваются значения
PNode->Value = 28;
PNode->Next = NULL;
delete PNode; // освобождение памяти
Описание слайда:
Например, объявим динамическую структуру данных с именем Node с полями Name, Value и Next, выделим память под указатель на структуру, присвоим значения элементам структуры и освободим память. Например, объявим динамическую структуру данных с именем Node с полями Name, Value и Next, выделим память под указатель на структуру, присвоим значения элементам структуры и освободим память. struct Node {char *Name; int Value; Node *Next }; Node *PNode; //объявляется указатель PNode = new Node; //выделяется память PNode->Name = "STO"; //присваиваются значения PNode->Value = 28; PNode->Next = NULL; delete PNode; // освобождение памяти

Слайд 13





#include <iostream>
#include <iostream>
using namespace std;
void main()
{	struct node {int info;
		struct node *next;
	   };
	typedef node *NodePtr;	// указатель на тип node
	NodePtr head = NULL;
	NodePtr p;			// указатель на текущий элемент
	NodePtr tail;		// указатель на "хвост" очереди
	int N = 10;			// количество элементов в очереди
	int cnt = 1;			// счетчик элементов в очереди
	if (head == NULL)
	{	head = new node;
	head->info = cnt++;	// или какому-то другому значению
	head->next = NULL;
	tail = head;
	}
	for (int i = 2; i<=N; i++)
	{ p = new node;
	p->info = cnt++;
	tail->next = p;		// в данном случае - NULL
	p->next = NULL;
	tail = p;
	}
// Вывод очереди на экран
p = head;
for (int i = 1; i<=N; i++)
	{	cout << p->info << ' ';
	p = p->next;
	}
cout <<endl;
}
Описание слайда:
#include <iostream> #include <iostream> using namespace std; void main() { struct node {int info; struct node *next; }; typedef node *NodePtr; // указатель на тип node NodePtr head = NULL; NodePtr p; // указатель на текущий элемент NodePtr tail; // указатель на "хвост" очереди int N = 10; // количество элементов в очереди int cnt = 1; // счетчик элементов в очереди if (head == NULL) { head = new node; head->info = cnt++; // или какому-то другому значению head->next = NULL; tail = head; } for (int i = 2; i<=N; i++) { p = new node; p->info = cnt++; tail->next = p; // в данном случае - NULL p->next = NULL; tail = p; } // Вывод очереди на экран p = head; for (int i = 1; i<=N; i++) { cout << p->info << ' '; p = p->next; } cout <<endl; }

Слайд 14





Динамические 
структуры данных: 

однонаправленные и двунаправленные списки
Описание слайда:
Динамические структуры данных: однонаправленные и двунаправленные списки

Слайд 15





Понятие списка хорошо известно из жизненных примеров: 
Понятие списка хорошо известно из жизненных примеров: 
список студентов учебной группы, 
список призёров олимпиады, 
список (перечень) документов для представления в приёмную комиссию, 
список почтовой рассылки, 
список литературы для самостоятельного чтения и т.п.
Описание слайда:
Понятие списка хорошо известно из жизненных примеров:  Понятие списка хорошо известно из жизненных примеров:  список студентов учебной группы,  список призёров олимпиады,  список (перечень) документов для представления в приёмную комиссию,  список почтовой рассылки,  список литературы для самостоятельного чтения и т.п.

Слайд 16





Список – последовательность элементов, связанных посредством указателей (ссылок)
Список – последовательность элементов, связанных посредством указателей (ссылок)
Элементы списка также называются узлами
Размер списка – количество находящихся в нем элементов
Пустой список – список размера  0
Каждый элемент (узел) списка состоит из двух частей:
информационная – содержит значение элемента
адресная – содержит указатель на тот узел, который связан с данным узлом
Отсутствие указателя (пустой указатель или значение 0 на месте указателя) означает, что данный элемент является последним в списке.
Описание слайда:
Список – последовательность элементов, связанных посредством указателей (ссылок) Список – последовательность элементов, связанных посредством указателей (ссылок) Элементы списка также называются узлами Размер списка – количество находящихся в нем элементов Пустой список – список размера 0 Каждый элемент (узел) списка состоит из двух частей: информационная – содержит значение элемента адресная – содержит указатель на тот узел, который связан с данным узлом Отсутствие указателя (пустой указатель или значение 0 на месте указателя) означает, что данный элемент является последним в списке.

Слайд 17





Каждый список имеет особый элемент - начало списка (голова списка), который обычно по содержанию отличен от остальных элементов. 
Каждый список имеет особый элемент - начало списка (голова списка), который обычно по содержанию отличен от остальных элементов. 
В поле указателя последнего элемента списка находится специальный признак NULL, свидетельствующий о конце списка.
Описание слайда:
Каждый список имеет особый элемент - начало списка (голова списка), который обычно по содержанию отличен от остальных элементов. Каждый список имеет особый элемент - начало списка (голова списка), который обычно по содержанию отличен от остальных элементов. В поле указателя последнего элемента списка находится специальный признак NULL, свидетельствующий о конце списка.

Слайд 18





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

Однонаправленный (односвязный) список – это структура данных, представляющая собой последовательность элементов, в каждом из которых хранится значение и указатель на следующий элемент списка . В последнем элементе указатель на следующий элемент равен NULL.
Описание слайда:
Наиболее простой динамической структурой является однонаправленный список, элементами которого служат объекты структурного типа. Наиболее простой динамической структурой является однонаправленный список, элементами которого служат объекты структурного типа. Однонаправленный (односвязный) список – это структура данных, представляющая собой последовательность элементов, в каждом из которых хранится значение и указатель на следующий элемент списка . В последнем элементе указатель на следующий элемент равен NULL.

Слайд 19





Описание простейшего элемента такого списка выглядит следующим образом:
Описание простейшего элемента такого списка выглядит следующим образом:
struct имя_типа { информационное поле; адресное поле; };
где информационное поле – это поле любого, ранее объявленного или стандартного, типа;
адресное поле – это указатель на объект того же типа, что и определяемая структура, в него записывается адрес следующего элемента списка.
Например:
struct Node { int key;//информационное поле Node*next;//адресное поле };
Описание слайда:
Описание простейшего элемента такого списка выглядит следующим образом: Описание простейшего элемента такого списка выглядит следующим образом: struct имя_типа { информационное поле; адресное поле; }; где информационное поле – это поле любого, ранее объявленного или стандартного, типа; адресное поле – это указатель на объект того же типа, что и определяемая структура, в него записывается адрес следующего элемента списка. Например: struct Node { int key;//информационное поле Node*next;//адресное поле };

Слайд 20





Информационных полей может быть несколько.
Информационных полей может быть несколько.
Например:
struct point { 
	char*name;  //информационное поле 
	int age; //информационное поле 
	point*next;//адресное поле 
		};
Каждый элемент списка содержит ключ, который идентифицирует этот элемент. Ключ обычно бывает либо целым числом, либо строкой.
Описание слайда:
Информационных полей может быть несколько. Информационных полей может быть несколько. Например: struct point { char*name; //информационное поле int age; //информационное поле point*next;//адресное поле }; Каждый элемент списка содержит ключ, который идентифицирует этот элемент. Ключ обычно бывает либо целым числом, либо строкой.

Слайд 21





Основными операциями, осуществляемыми с однонаправленными списками, являются:
Основными операциями, осуществляемыми с однонаправленными списками, являются:
создание списка;
печать (просмотр) списка;
вставка элемента в список;
удаление элемента из списка;
поиск элемента в списке
проверка пустоты списка;
удаление списка.
Особое внимание следует обратить на то, что при выполнении любых операций с линейным однонаправленным списком необходимо обеспечивать позиционирование указателя на первый элемент. В противном случае часть или весь список будет недоступен.
Описание слайда:
Основными операциями, осуществляемыми с однонаправленными списками, являются: Основными операциями, осуществляемыми с однонаправленными списками, являются: создание списка; печать (просмотр) списка; вставка элемента в список; удаление элемента из списка; поиск элемента в списке проверка пустоты списка; удаление списка. Особое внимание следует обратить на то, что при выполнении любых операций с линейным однонаправленным списком необходимо обеспечивать позиционирование указателя на первый элемент. В противном случае часть или весь список будет недоступен.

Слайд 22





Для описания алгоритмов этих основных операций используется следующее объявление:
Для описания алгоритмов этих основных операций используется следующее объявление:
struct Single_List {//структура данных 
	int Data; //информационное поле 
	Single_List *Next; //адресное поле }; 
. . . . . . . . . . 
Single_List *Head; //указатель на первый элемент списка
. . . . . . . . . . 
Single_List *Current; 
//указатель на текущий элемент списка (при необходимости)
Описание слайда:
Для описания алгоритмов этих основных операций используется следующее объявление: Для описания алгоритмов этих основных операций используется следующее объявление: struct Single_List {//структура данных int Data; //информационное поле Single_List *Next; //адресное поле }; . . . . . . . . . . Single_List *Head; //указатель на первый элемент списка . . . . . . . . . . Single_List *Current; //указатель на текущий элемент списка (при необходимости)

Слайд 23





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

При относительно небольших размерах списка можно использовать рекурсивную функцию. Добавление может выполняться как в начало, так и в конец списка.
Описание слайда:
Создание однонаправленного списка Создание однонаправленного списка Для того, чтобы создать список: создать сначала первый элемент списка, при помощи функции добавить к нему остальные элементы. При относительно небольших размерах списка можно использовать рекурсивную функцию. Добавление может выполняться как в начало, так и в конец списка.

Слайд 24





//создание однонаправленного списка (добавления в конец)
//создание однонаправленного списка (добавления в конец)
void Make_Single_List(int n,Single_List** Head){
  if (n > 0) {
    (*Head) = new Single_List();
    //выделяем память под новый элемент
    cout << "Введите значение ";
    cin >> (*Head)->Data;
    //вводим значение информационного поля
    (*Head)->Next=NULL;//обнуление адресного поля
     Make_Single_List(n-1,&((*Head)->Next));
  }
}
Описание слайда:
//создание однонаправленного списка (добавления в конец) //создание однонаправленного списка (добавления в конец) void Make_Single_List(int n,Single_List** Head){ if (n > 0) { (*Head) = new Single_List(); //выделяем память под новый элемент cout << "Введите значение "; cin >> (*Head)->Data; //вводим значение информационного поля (*Head)->Next=NULL;//обнуление адресного поля Make_Single_List(n-1,&((*Head)->Next)); } }

Слайд 25





Печать (просмотр) однонаправленного списка
Печать (просмотр) однонаправленного списка
Операция печати списка заключается в последовательном просмотре всех элементов списка и выводе их значений на экран. 
Для обработки списка организуется функция, в которой нужно переставлять указатель на следующий элемент списка до тех пор, пока указатель не станет равен NULL, то есть будет достигнут конец списка. 
Реализуем данную функцию рекурсивно.
Описание слайда:
Печать (просмотр) однонаправленного списка Печать (просмотр) однонаправленного списка Операция печати списка заключается в последовательном просмотре всех элементов списка и выводе их значений на экран. Для обработки списка организуется функция, в которой нужно переставлять указатель на следующий элемент списка до тех пор, пока указатель не станет равен NULL, то есть будет достигнут конец списка. Реализуем данную функцию рекурсивно.

Слайд 26





//печать однонаправленного списка
//печать однонаправленного списка
void Print_Single_List(Single_List* Head) {
  if (Head != NULL) {
    cout << Head->Data << "\t";
    Print_Single_List(Head->Next);
    //переход к следующему элементу
  }
  else cout << "\n";
}
Описание слайда:
//печать однонаправленного списка //печать однонаправленного списка void Print_Single_List(Single_List* Head) { if (Head != NULL) { cout << Head->Data << "\t"; Print_Single_List(Head->Next); //переход к следующему элементу } else cout << "\n"; }

Слайд 27





Вставка элемента в однонаправленный список
Вставка элемента в однонаправленный список
В динамические структуры легко добавлять элементы, так как для этого достаточно изменить значения адресных полей. 
Вставка первого и последующих элементов списка отличаются друг от друга. Поэтому в функции, реализующей данную операцию, сначала осуществляется проверка, на какое место вставляется элемент. Далее реализуется соответствующий алгоритм добавления
Описание слайда:
Вставка элемента в однонаправленный список Вставка элемента в однонаправленный список В динамические структуры легко добавлять элементы, так как для этого достаточно изменить значения адресных полей. Вставка первого и последующих элементов списка отличаются друг от друга. Поэтому в функции, реализующей данную операцию, сначала осуществляется проверка, на какое место вставляется элемент. Далее реализуется соответствующий алгоритм добавления

Слайд 28





/*вставка элемента с заданным номером в однонаправленный список*/
/*вставка элемента с заданным номером в однонаправленный список*/
Single_List* Insert_Item_Single_List(Single_List* Head, 
      int Number, int DataItem){ 
  Number--;
  Single_List *NewItem=new(Single_List);
  NewItem->Data=DataItem; 
  NewItem->Next = NULL;
  if (Head == NULL) {//список пуст
    Head = NewItem;//создаем первый элемент списка
  }
  else {//список не пуст
    Single_List *Current=Head;
    for(int i=1; i < Number && Current->Next!=NULL; i++)
    Current=Current->Next;
    if (Number == 0){
    //вставляем новый элемент на первое место
      NewItem->Next = Head;
      Head = NewItem;
    }
    else {//вставляем новый элемент на непервое место
      if (Current->Next != NULL) 
      	NewItem->Next = Current->Next;
      Current->Next = NewItem;
    }
  }
  return Head; 
}
Описание слайда:
/*вставка элемента с заданным номером в однонаправленный список*/ /*вставка элемента с заданным номером в однонаправленный список*/ Single_List* Insert_Item_Single_List(Single_List* Head, int Number, int DataItem){ Number--; Single_List *NewItem=new(Single_List); NewItem->Data=DataItem; NewItem->Next = NULL; if (Head == NULL) {//список пуст Head = NewItem;//создаем первый элемент списка } else {//список не пуст Single_List *Current=Head; for(int i=1; i < Number && Current->Next!=NULL; i++) Current=Current->Next; if (Number == 0){ //вставляем новый элемент на первое место NewItem->Next = Head; Head = NewItem; } else {//вставляем новый элемент на непервое место if (Current->Next != NULL) NewItem->Next = Current->Next; Current->Next = NewItem; } } return Head; }

Слайд 29





Удаление элемента из однонаправленного списка
Удаление элемента из однонаправленного списка
Из динамических структур можно удалять элементы, так как для этого достаточно изменить значения адресных полей. 
Операция удаления элемента однонаправленного списка осуществляет удаление элемента, на который установлен указатель текущего элемента. 
После удаления указатель текущего элемента устанавливается на предшествующий элемент списка или на новое начало списка, если удаляется первый.
Алгоритмы удаления первого и последующих элементов списка отличаются друг от друга. Поэтому в функции, реализующей данную операцию, осуществляется проверка, какой элемент удаляется. Далее реализуется соответствующий алгоритм удаления
Описание слайда:
Удаление элемента из однонаправленного списка Удаление элемента из однонаправленного списка Из динамических структур можно удалять элементы, так как для этого достаточно изменить значения адресных полей. Операция удаления элемента однонаправленного списка осуществляет удаление элемента, на который установлен указатель текущего элемента. После удаления указатель текущего элемента устанавливается на предшествующий элемент списка или на новое начало списка, если удаляется первый. Алгоритмы удаления первого и последующих элементов списка отличаются друг от друга. Поэтому в функции, реализующей данную операцию, осуществляется проверка, какой элемент удаляется. Далее реализуется соответствующий алгоритм удаления

Слайд 30





Удаление элемента из однонаправленного списка
Удаление элемента из однонаправленного списка
Описание слайда:
Удаление элемента из однонаправленного списка Удаление элемента из однонаправленного списка

Слайд 31





/*удаление элемента с заданным номером из однонаправленного списка*/
/*удаление элемента с заданным номером из однонаправленного списка*/
Single_List* Delete_Item_Single_List(Single_List* Head, 
      int Number){
  Single_List *ptr;//вспомогательный указатель
  Single_List *Current = Head;
  for (int i = 1; i < Number && Current != NULL; i++)
    Current = Current->Next;
  if (Current != NULL){//проверка на корректность
    if (Current == Head){//удаляем первый элемент
      Head = Head->Next;
      delete(Current);
      Current = Head;
    }
    else {//удаляем непервый элемент
      ptr = Head;
      while (ptr->Next != Current)
        ptr = ptr->Next; 
      ptr->Next = Current->Next;
      delete(Current);
      Current=ptr;
    }
  }
  return Head;
}
Описание слайда:
/*удаление элемента с заданным номером из однонаправленного списка*/ /*удаление элемента с заданным номером из однонаправленного списка*/ Single_List* Delete_Item_Single_List(Single_List* Head, int Number){ Single_List *ptr;//вспомогательный указатель Single_List *Current = Head; for (int i = 1; i < Number && Current != NULL; i++) Current = Current->Next; if (Current != NULL){//проверка на корректность if (Current == Head){//удаляем первый элемент Head = Head->Next; delete(Current); Current = Head; } else {//удаляем непервый элемент ptr = Head; while (ptr->Next != Current) ptr = ptr->Next; ptr->Next = Current->Next; delete(Current); Current=ptr; } } return Head; }

Слайд 32





Поиск элемента в однонаправленном списке
Поиск элемента в однонаправленном списке
Операция поиска элемента в списке заключается в последовательном просмотре всех элементов списка до тех пор, пока текущий элемент не будет содержать заданное значение или пока не будет достигнут конец списка. 
В последнем случае фиксируется отсутствие искомого элемента в списке (функция принимает значение false)
Описание слайда:
Поиск элемента в однонаправленном списке Поиск элемента в однонаправленном списке Операция поиска элемента в списке заключается в последовательном просмотре всех элементов списка до тех пор, пока текущий элемент не будет содержать заданное значение или пока не будет достигнут конец списка. В последнем случае фиксируется отсутствие искомого элемента в списке (функция принимает значение false)

Слайд 33





//поиск элемента в однонаправленном списке
//поиск элемента в однонаправленном списке
bool Find_Item_Single_List(Single_List* Head, int DataItem){
  Single_List *ptr; //вспомогательным указатель
  ptr = Head;
  while (ptr != NULL){//пока не конец списка
    if (DataItem == ptr->Data) return true; 
    else ptr = ptr->Next;
  }
  return false;
}
Описание слайда:
//поиск элемента в однонаправленном списке //поиск элемента в однонаправленном списке bool Find_Item_Single_List(Single_List* Head, int DataItem){ Single_List *ptr; //вспомогательным указатель ptr = Head; while (ptr != NULL){//пока не конец списка if (DataItem == ptr->Data) return true; else ptr = ptr->Next; } return false; }

Слайд 34





Удаление однонаправленного списка
Удаление однонаправленного списка
Операция удаления списка заключается в освобождении динамической памяти. 
Для данной операции организуется функция, в которой нужно переставлять указатель на следующий элемент списка до тех пор, пока указатель не станет равен NULL, то есть не будет достигнут конец списка. 
Реализуем рекурсивную функцию.
Описание слайда:
Удаление однонаправленного списка Удаление однонаправленного списка Операция удаления списка заключается в освобождении динамической памяти. Для данной операции организуется функция, в которой нужно переставлять указатель на следующий элемент списка до тех пор, пока указатель не станет равен NULL, то есть не будет достигнут конец списка. Реализуем рекурсивную функцию.

Слайд 35





/*освобождение памяти, выделенной под однонаправленный список*/
/*освобождение памяти, выделенной под однонаправленный список*/
void Delete_Single_List(Single_List* Head){
  if (Head != NULL){
    Delete_Single_List(Head->Next);
    delete Head;
  }
}
Описание слайда:
/*освобождение памяти, выделенной под однонаправленный список*/ /*освобождение памяти, выделенной под однонаправленный список*/ void Delete_Single_List(Single_List* Head){ if (Head != NULL){ Delete_Single_List(Head->Next); delete Head; } }

Слайд 36





Таким образом, 
Таким образом, 
однонаправленный список имеет только один указатель в каждом элементе. 
Это позволяет минимизировать расход памяти на организацию такого списка. 
Одновременно это позволяет осуществлять переходы между элементами только в одном направлении, что зачастую увеличивает время, затрачиваемое на обработку списка. 
Например, для перехода к предыдущему элементу необходимо осуществить просмотр списка с начала до элемента, указатель которого установлен на текущий элемент.
Описание слайда:
Таким образом, Таким образом, однонаправленный список имеет только один указатель в каждом элементе. Это позволяет минимизировать расход памяти на организацию такого списка. Одновременно это позволяет осуществлять переходы между элементами только в одном направлении, что зачастую увеличивает время, затрачиваемое на обработку списка. Например, для перехода к предыдущему элементу необходимо осуществить просмотр списка с начала до элемента, указатель которого установлен на текущий элемент.

Слайд 37





Двунаправленные (двусвязные) списки
Двунаправленные (двусвязные) списки
Для ускорения многих операций целесообразно применять переходы между элементами списка в обоих направлениях. Это реализуется с помощью двунаправленных списков, которые являются сложной динамической структурой.
Двунаправленный (двусвязный) список – это структура данных, состоящая из последовательности элементов, каждый из которых содержит информационную часть и два указателя на соседние элементы. При этом два соседних элемента должны содержать взаимные ссылки друг на друга.
Описание слайда:
Двунаправленные (двусвязные) списки Двунаправленные (двусвязные) списки Для ускорения многих операций целесообразно применять переходы между элементами списка в обоих направлениях. Это реализуется с помощью двунаправленных списков, которые являются сложной динамической структурой. Двунаправленный (двусвязный) список – это структура данных, состоящая из последовательности элементов, каждый из которых содержит информационную часть и два указателя на соседние элементы. При этом два соседних элемента должны содержать взаимные ссылки друг на друга.

Слайд 38





Двунаправленные (двусвязные) списки
Двунаправленные (двусвязные) списки
В таком списке каждый элемент (кроме первого и последнего) связан с предыдущим и следующим за ним элементами. 
Каждый элемент двунаправленного списка имеет три  поля : 
одно поле содержит ссылку на следующий элемент, 
другое поле – ссылку на предыдущий элемент 
третье поле – информационное. 
Наличие ссылок на следующее звено и на предыдущее позволяет двигаться по списку от каждого звена в любом направлении: от звена к концу списка или от звена к началу списка, поэтому такой список называют двунаправленным.
Описание слайда:
Двунаправленные (двусвязные) списки Двунаправленные (двусвязные) списки В таком списке каждый элемент (кроме первого и последнего) связан с предыдущим и следующим за ним элементами. Каждый элемент двунаправленного списка имеет три поля : одно поле содержит ссылку на следующий элемент, другое поле – ссылку на предыдущий элемент третье поле – информационное. Наличие ссылок на следующее звено и на предыдущее позволяет двигаться по списку от каждого звена в любом направлении: от звена к концу списка или от звена к началу списка, поэтому такой список называют двунаправленным.

Слайд 39





Описание простейшего элемента такого списка:
Описание простейшего элемента такого списка:
struct имя_типа {
                 информационное поле;
                 адресное поле 1;
                 адресное поле 2;
                };
где 
информационное поле – это поле любого, ранее объявленного или стандартного, типа;
адресное поле 1 – это указатель на объект того же типа, что и определяемая структура, в него записывается адрес следующего элемента списка ;
адресное поле 2 – это указатель на объект того же типа, что и определяемая структура, в него записывается адрес предыдущего элемента списка.
Описание слайда:
Описание простейшего элемента такого списка: Описание простейшего элемента такого списка: struct имя_типа { информационное поле; адресное поле 1; адресное поле 2; }; где информационное поле – это поле любого, ранее объявленного или стандартного, типа; адресное поле 1 – это указатель на объект того же типа, что и определяемая структура, в него записывается адрес следующего элемента списка ; адресное поле 2 – это указатель на объект того же типа, что и определяемая структура, в него записывается адрес предыдущего элемента списка.

Слайд 40





Например:
Например:
struct list { 
              type elem ;
              list *next, *pred ;
             }
list *headlist ;
где 
type – тип информационного поля элемента списка;
*next, *pred – указатели на следующий и предыдущий элементы этой структуры соответственно.
Переменная-указатель headlist задает список как единый программный объект, ее значение – указатель на первый (или заглавный) элемент списка.
Описание слайда:
Например: Например: struct list { type elem ; list *next, *pred ; } list *headlist ; где type – тип информационного поля элемента списка; *next, *pred – указатели на следующий и предыдущий элементы этой структуры соответственно. Переменная-указатель headlist задает список как единый программный объект, ее значение – указатель на первый (или заглавный) элемент списка.

Слайд 41





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

Слайд 42





При исключении элемента из списка нужно использовать как указатель на сам исключаемый элемент, так и указатели на предшествующий или следующий за исключаемым элементы. 
При исключении элемента из списка нужно использовать как указатель на сам исключаемый элемент, так и указатели на предшествующий или следующий за исключаемым элементы. 
Но так как элемент двунаправленного списка имеет два указателя, то при выполнении операций включения/исключения элемента надо изменять больше связей, чем в однонаправленном списке.
Описание слайда:
При исключении элемента из списка нужно использовать как указатель на сам исключаемый элемент, так и указатели на предшествующий или следующий за исключаемым элементы. При исключении элемента из списка нужно использовать как указатель на сам исключаемый элемент, так и указатели на предшествующий или следующий за исключаемым элементы. Но так как элемент двунаправленного списка имеет два указателя, то при выполнении операций включения/исключения элемента надо изменять больше связей, чем в однонаправленном списке.

Слайд 43





Основные операции, осуществляемые с двунаправленными списками:
Основные операции, осуществляемые с двунаправленными списками:
создание списка;
печать (просмотр) списка;
вставка элемента в список;
удаление элемента из списка;
поиск элемента в списке;
проверка пустоты списка;
удаление списка.
Описание слайда:
Основные операции, осуществляемые с двунаправленными списками: Основные операции, осуществляемые с двунаправленными списками: создание списка; печать (просмотр) списка; вставка элемента в список; удаление элемента из списка; поиск элемента в списке; проверка пустоты списка; удаление списка.

Слайд 44





Особое внимание следует обратить на то, что в отличие от однонаправленного списка здесь нет необходимости обеспечивать позиционирование какого-либо указателя именно на первый элемент списка, так как благодаря двум указателям в элементах можно получить доступ к любому элементу списка из любого другого элемента, осуществляя переходы в прямом или обратном направлении. 
Особое внимание следует обратить на то, что в отличие от однонаправленного списка здесь нет необходимости обеспечивать позиционирование какого-либо указателя именно на первый элемент списка, так как благодаря двум указателям в элементах можно получить доступ к любому элементу списка из любого другого элемента, осуществляя переходы в прямом или обратном направлении. 
Однако по правилам хорошего тона программирования указатель желательно ставить на заголовок списка.
Описание слайда:
Особое внимание следует обратить на то, что в отличие от однонаправленного списка здесь нет необходимости обеспечивать позиционирование какого-либо указателя именно на первый элемент списка, так как благодаря двум указателям в элементах можно получить доступ к любому элементу списка из любого другого элемента, осуществляя переходы в прямом или обратном направлении. Особое внимание следует обратить на то, что в отличие от однонаправленного списка здесь нет необходимости обеспечивать позиционирование какого-либо указателя именно на первый элемент списка, так как благодаря двум указателям в элементах можно получить доступ к любому элементу списка из любого другого элемента, осуществляя переходы в прямом или обратном направлении. Однако по правилам хорошего тона программирования указатель желательно ставить на заголовок списка.

Слайд 45





Создание двунаправленного списка
Создание двунаправленного списка
Для того, чтобы создать список, нужно создать сначала первый элемент списка, а затем при помощи функции добавить к нему остальные элементы. Добавление может выполняться как в начало, так и в конец списка. Реализуем рекурсивную функцию.
//создание двунаправленного списка (добавления в конец)
void Make_Double_List(int n,Double_List** Head,
         Double_List* Prior){
  if (n > 0) {
    (*Head) = new Double_List();
     //выделяем память под новый элемент
    cout << "Введите значение ";
    cin >> (*Head)->Data;
    //вводим значение информационного поля
    (*Head)->Prior = Prior;
    (*Head)->Next=NULL;//обнуление адресного поля
    Make_Double_List(n-1,&((*Head)->Next),(*Head));
  }
  else (*Head) = NULL;
}
Описание слайда:
Создание двунаправленного списка Создание двунаправленного списка Для того, чтобы создать список, нужно создать сначала первый элемент списка, а затем при помощи функции добавить к нему остальные элементы. Добавление может выполняться как в начало, так и в конец списка. Реализуем рекурсивную функцию. //создание двунаправленного списка (добавления в конец) void Make_Double_List(int n,Double_List** Head, Double_List* Prior){ if (n > 0) { (*Head) = new Double_List(); //выделяем память под новый элемент cout << "Введите значение "; cin >> (*Head)->Data; //вводим значение информационного поля (*Head)->Prior = Prior; (*Head)->Next=NULL;//обнуление адресного поля Make_Double_List(n-1,&((*Head)->Next),(*Head)); } else (*Head) = NULL; }



Похожие презентации
Mypresentation.ru
Загрузить презентацию