Разделы презентаций


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

Содержание

10.1 СпискиСписок – способ организации данных, предполагающий использова-ние указателей для определения следующего элемента.Элемент списка состоит из двух частей: информационной и адресной.Информационная часть содержит поля данных.Адресная – включает от одного до n

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

Слайд 110 Динамические структуры данных
Структуры данных
Последовательности
Деревья
Сети
Вектор
Стек
Дек
Бинарные
Сортированные
бинарные
Динамические линейные структуры
1. Очередь

– структура данных, реализующая: добавление – в конец, а удаление

– из начала.
2. Стек – структура данных, реализующая: добав-ление и удаление с одной стороны.
3. Дек – структура данных, реализующая: добав-ление и удаление с двух сторон.





Очередь

Строка

Запись

Матрица

10 Динамические структуры данныхСтруктуры данныхПоследовательностиДеревьяСетиВекторСтекДекБинарные Сортированныебинарные Динамические линейные структуры1. Очередь – структура данных, реализующая: добавление – в

Слайд 210.1 Списки
Список – способ организации данных, предполагающий использова-ние указателей для

определения следующего элемента.
Элемент списка состоит из двух частей: информационной и

адресной.
Информационная часть содержит поля данных.
Адресная – включает от одного до n указателей, содержащих адреса следующих элементов. Количество связей, между соседними элементами списка определяет его связность: односвязные, двусвязные, n-связные.

Списки

Линейные

Древовидные

N-связные

Кольцевые

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

Слайд 3Виды списков
Линейный односвязный
Кольцевой односвязный
Линейный двусвязный
Кольцевой двусвязный
Сетевой n-связный

Виды списковЛинейный односвязныйКольцевой односвязныйЛинейный двусвязныйКольцевой двусвязныйСетевой n-связный

Слайд 4Примеры описания элементов списка
Односвяный список:
struct element {

{тип указателя}
char name[16];

{информационное поле 1}
char telefon[7]; {информационное поле 2}
element *p; {адресное поле}
};
Двусвяный список:
struct element { {тип указателя}
char name[16]; {информационное поле 1}
char telefon[7]; {информационное поле 2}
element *prev; {адресное поле «предыдущий»}
element *next; {адресное поле «следующий»}
};
Примеры описания элементов спискаОдносвяный список:struct element {         {тип указателя}

Слайд 510.2 Односвязные списки
Аналогично одномерным массивам односвязные списки реализуют последовательность элементов.

Однако в отличие от одномерных массивов позволяют:
работать с произвольным количеством

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

Слайд 6Основные приемы работы
Описание элемента списка:
struct element {тип на элемента}
{int

num; {число}
element *p;

{указатель на следующий элемент}
};

Описание переменной – указателя списка и нескольких переменных-указателей в статической памяти:
element * first, {адрес первого элемента}
*n,*f,*q; {вспомогательные указатели}

Исходное состояние – «список пуст»:
first=NULL;


first



n


f


q

Основные приемы работыОписание элемента списка:struct element  {тип на элемента}{int num;     {число}

Слайд 7Основные приемы работы (2)‏
1 Добавление элемента к пустому списку:
first=new

element;
first ->num=5;


first->p=NULL;
2 Добавление элемента перед первым (по типу стека):
q=new element;
q->num=4;
q->p=first;
first=q;
3 Добавление элемента после первого (по типу очереди):
q=new element;
q->num=4;
q->p=NULL;
first->p=q;


first




5



first



5



q



4


first



5



q



4


Основные приемы работы (2)‏1 Добавление элемента к пустому списку:	 first=new element;

Слайд 8Варианты удаления элементов

first


5

q


4


8


first


5


4


8

first


5


4


8


f


8


q


q

f

1. Удаление первого элемента
q=first;
firs=first->p;
delete(q)

2. Удаление элемента с

адресом q
f=first;
while(f->p!=q)
f=f->p;
q=q->p;
delete(f->p);
f->p=q;
3. Удаление последнего элемента
f=q=first;
while(q->p!=NULL)
{f=q; q=q->p;}
f->p=NULL;
delete(q);

Варианты удаления элементовfirst5q48∅first548first548∅f8∅qqf∅1. Удаление первого элементаq=first; firs=first->p;delete(q)2. Удаление элемента с адресом qf=first;while(f->p!=q)f=f->p;q=q->p;delete(f->p);f->p=q;3. Удаление последнего элементаf=q=first;while(q->p!=NULL){f=q; q=q->p;}f->p=NULL;delete(q);

Слайд 9Динамические структуры данных (Ex10_1)
Пример. Стек записей.
#include "stdafx.h"
#include
#include
struct zap

{ char det[10]; float diam; zap *p; };
int main(int argc, char* argv[])
{

zap a,*r,*q,*f;
r=new zap;
r->p=NULL;
puts("Input strings");
scanf("%s %f\n",r->det,&r->diam);





r

det diam p


Гайка

10




det diam p


Гайка

10

a

Написать программу, которая формирует список деталей, содержащих наименование детали и ее диаметр. Удалить из списка все детали с диаметром, меньшим 1.


Слайд 10Динамические структуры данных (2)
while((scanf("\n%s",a.det)),strcmp(a.det,"end")!=0)
{ scanf("%f",&a.diam);

q=r;
r=new zap;

strcpy(r->det,a.det);
r->diam=a.diam;
r->p=q;
}





r

det diam p




det diam p

a


Гайка

10


r

det diam p

q




Слайд 11Динамические структуры (3) Удаление записей
q=r;
do
{if (q->diam


r=r->p;
delete(q);
q=r;
}

else
{q=q->p;
delete(f->p);
f->p:=q
}
else
{f=q;
q=q->p;
}
}while(q!=NULL);





r

q





r

q



f

Динамические структуры (3)  Удаление записейq=r;do {if (q->diamp; 		   delete(q); q=r;  }  else

Слайд 12Динамические структуры данных (4)
q=r;
puts("Result");
if(q==NULL)

puts("No information");
else
do { printf("%s %5.1f\n",q->det,q->diam);

q=q->p; }
while (q!=NULL);
return 0;
}


Слайд 13Кольцевой список
1 2 3 4 5
// Ex10_2.cpp
#include

"stdafx.h"
#include
int play(int n,int m)
{
struct child {

int name;
child *p;};
int i,j;
child *first,*next,*pass;


1


3


2


4


5


first

Кольцевой список 1 2 3 4 5 // Ex10_2.cpp #include

Слайд 14Создание списка
{ Создание списка }
first=new child;

first->name=1;
pass=first;
for( i=2;i

{next=new child;
next->name=i;
pass->p=next;
pass=next; }
pass->p:=first; {Замыкание круга}


1


2


5


First


Pass


Next


3


4


Создание списка { Создание списка } first=new child;   first->name=1;   pass=first;   for(

Слайд 15Проход по кольцу m-1 раз
pass=first;
for{i=n;i>1;i++)
{


for(j=1;j

{ next=pass;
pass=pass->p;}


1


2


5


First


Pass


Next


3


4


Проход по кольцу m-1 раз 	pass=first; 	for{i=n;i>1;i++) 	  {     for(j=1;jp;}125FirstPassNext34

Слайд 16Удаление m-го элемента. Основная программа
printf(“%2d\n”,pass->name);
next->p=pass->p;
delete(pass);
pass=next->p;
}
//Возврат результата
return pass->name;
}


1

2

5

First

Pass

Next

3

4


int main()


{
printf(“Result =“);
printf(“%4d\n”,play(5,7));
}

Удаление m-го элемента. Основная программаprintf(“%2d\n”,pass->name);next->p=pass->p;delete(pass);pass=next->p; } //Возврат результатаreturn pass->name;}125FirstPassNext34int main() { printf(“Result =“); printf(“%4d\n”,play(5,7));}

Слайд 1710.3 Бинарные сортированные деревья
В математике бинарным деревом называют конечное множество

вершин, которое либо пусто, либо состоит из корня и не

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


Вершины, из которых не выходит ни одной ветви, называют листьями

Сортированные бинарные деревья, строятся по правилу: ключевое поле левого поддерева должно содержать значение меньше, чем в корне, а ключевое поле правого поддерева – значение больше или равное значению в корне.

10.3 Бинарные сортированные деревьяВ математике бинарным деревом называют конечное множество вершин, которое либо пусто, либо состоит из

Слайд 18Построение бинарного дерева
Рассмотрим последовательность целых чисел: {5, 2, 8, 7,

2, 9, 1, 5}








Пример. Разработать программу сортировки последовательности чисел с

использованием бинарного дерева.

5

2

8

7

2

9

1

5

Построение бинарного дереваРассмотрим последовательность целых чисел: {5, 2, 8, 7, 2, 9, 1, 5}Пример. Разработать программу сортировки

Слайд 19Описание элемента дерева
// Ex10_3.cpp
#include "stdafx.h"
#include
#include
#include
#define lim

100
struct top_ptr
{int value;
top_ptr * left;
top_ptr * right;};
int next_number;
top_ptr * r,*pass;
Основная
программа
Add
Tree
Схема

структурная ПО
Описание элемента дерева// Ex10_3.cpp#include

Слайд 20Основная программа
int main(int argc,char argv[])
{ r=NULL;
puts(“input value or

1000 for end”);
scanf(“%d”,&next_number);
while(next_number!=1000)
{ pass=new top_ptr;

pass->value=next_number;
pass->left=NULL;
pass->right=NULL;
Add1(&r,pass);
scanf(“%d”,&next_number);‏
}
puts(“===Result===”);
Tree1(r); printf(“\n”);
getch();return 0;
}



pass





r

5

Основная программаint main(int argc,char argv[]) { r=NULL; puts(“input value or 1000 for end”); scanf(“%d”,&next_number); while(next_number!=1000)  {

Слайд 21Нерекурсивная процедура построения дерева
void Add1(top_pt **r,top_ptr *pass);
{top_ptr *next,*succ;
if(*r==NULL) *r=pass;

else
{succ=*r;
while(succ!=NULL)

{next=succ;
if(pass->valuevalue)
succ=succ->left;
else succ=succ->right;
}
if(pass->valuevalue
next->left=pass;
else next->right=pass;
}
}


5


r


pass




5

r


succ



2


pass




next


Нерекурсивная процедура построения дереваvoid Add1(top_pt **r,top_ptr *pass);{top_ptr *next,*succ; if(*r==NULL) *r=pass; else {succ=*r;

Слайд 22Рекурсивная процедура построения дерева
void Add2(top_ptr **r,top_ptr *pass)
{ top_ptr *

rr;
rr=*r;
if(rr==NULL) *r=pass;
else
if (pass->valuevalue)
Add2(&rr->left,pass);
else Add2(&rr->right,pass);
}

Рекурсивная процедура построения дереваvoid Add2(top_ptr **r,top_ptr *pass) { top_ptr * rr;rr=*r;if(rr==NULL) *r=pass; elseif (pass->valuevalue)Add2(&rr->left,pass);else Add2(&rr->right,pass); }

Слайд 23Нерекурсивная процедура обхода дерева
void Tree1(top_ptr *r)
{ struct memo{
short int nom;
top_ptr

* adres[lim];} memo1;
top_ptr * pass;
memo1.nom=-1;
pass=r;

Нерекурсивная процедура обхода дереваvoid Tree1(top_ptr *r){ struct memo{short int nom;top_ptr * adres[lim];} memo1; top_ptr * pass;memo1.nom=-1;pass=r;

Слайд 24Нерекурсивная процедура обхода дерева (2)‏
while ((pass!=NULL)||(memo1.nom!=-1))
if (pass!=NULL)
{ if( memo1.nom==lim-1)

{ puts(" Error lim");

exit(1);}
memo1.nom=memo1.nom+1;
memo1.adres[memo1.nom]=pass;
pass=pass->left;
}
else{ pass=memo1.adres[memo1.nom];
memo1.nom=memo1.nom-1;
printf("%4d\n",pass->value);
pass=pass->right;}
}

5

2

8

7

2

9

1

5


Слайд 25Рекурсивная процедура обхода дерева
void Tree2(top_ptr *r)
{
if(r!=NULL)
{ Tree2(r->left);
printf("%4d",r->value);
Tree2(r->right);
}
}


Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика