Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
16OAiP_shpora_po_teorii.doc
Скачиваний:
2
Добавлен:
27.09.2019
Размер:
112.13 Кб
Скачать

13. Понятие списка, стека и очереди. Особенности работы со стеками.

Список-это последовательность однотипных данных работа с которыми ведётся в оперативной памяти. В процессе работы список может изменять свой размер. Наибольшее распространение получили 2 формы работы со списком это очередь и стек.

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

Очередь-это список с двумя точками входа. Данные добавляются в конец очереди и извлекаются из начала очереди. Реализуется принцип первым вошёл, первым вышел.

Добавление элемента в стек :

tstk *AddStask(tstk *sp, int inf)

{ tstk *spt=new tstk;

spt->inf = inf;

spt->a = sp; return spt; }

Чтение элемента с удалением

tstk *ReadStackD(tstk *sp, int &inf)

{ if (sp == NULL) return NULL;

tstk *spt = sp;

inf= sp->inf;

sp = sp->a;

delete spt;

return sp; }

14.Понятие списка, стека и очереди см. вопр.

13. Особенности работы с однонаправленной очередью.

Добавление элемента в очередь

void AddOch(toch **sp,toch **spk, int inf)

{ toch *spt=new toch;

spt->inf = inf;

spt->a = NULL;

if (*spk == NULL) // Если нет элементов

*sp=*spk=spt;

Else

{ (*spk)->a = spt;

*spk = spt; }

return; }

Чтение элемента с удалением

toch *ReadOchD(toch *sp, int &inf)

{ if (sp == NULL) return NULL;

inf= sp->inf;

toch *spt = sp;

sp = sp->a;

delete spt;

return sp; }

15. Двунаправл. очереди. Объявление. Особенности работы

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

Объявление типа: struct tochd { int inf; tochd *left; tochd *rigth; } *sp;

Создание очереди: void NewOchd(tochd **sl, tochd **sr) { *sl=new tochd; *sr=new tochd; (*sl)->left = NULL; (*sl)->rigth = *sr; (*sr)->left = *sl; (*sr)->rigth = NULL; return; }

Подключение: tochd *sl, *sr; NewOchd(&sl,&sr);

Добавление элемента после(перед) заданного: void AddOchdRigth(tochd *sp, int inf) { tochd *spt=new tochd; spt->inf = inf; spt->left = sp(sp->left); spt->rigth = sp->rigth(sp); sp(spt)->rigth = spt(sp); spt->rigth(left)->left(right) = spt; (sp->left = spt;) return; }

Чтение и удаление элемента с адресом sp: int ReadOchdD(tochd *sp) { int inf= sp->inf; sp->left->rigth = sp->rigth; sp->rigth->left = sp->left; delete sp; return inf; }

16. Циклические списки

Циклические списки позволяет осуществить перемещение по списку в любом направлении.

Объявление:

Struct toch { int int,

Tochd*leff;

Tochd*right; }

*sp;

Создание очереди:

Void new ochd(tochd**sf,tochd**sr)

{ *sr=new tochd;

*sr=new tochd;

(*sl)-> left=nuul;

(*sl)-> right = *sr;

(*sr)-> left = *sl;

(*sr)-> right = nuul;

Return;}

подключение:

toch *sl,*sr; new ochd

Удаление всей очереди:

Void del ochd all(tochd**sl,toch**sr)

{ Tochd *spt =(*sl)->right;

While (spt! = *sr)

{ cout <<read ochd D(spt) <<endl;

Snt =(*sl)-> right; }

Delete *sl,

*sl=null Spt -> right -> leff = spt;}

17. Древовидные структуры данных

Все данные называются узлами: Узел “a” – корень. Узлы, из которых не выходят связи – листы (f,g,r,i) Узлы, находящиеся непоср. ниже – дочерние. Все узлы, наход. выше\ниже след.- предки\потомки. Узлы с одним родителем – сестринские. Узел, не являющиеся листом – внутренний. Степень узла – количество дочерних узлов. Степень дерева – максимальный порядок его узлов. Дерево второй степени называется бинарным. Глубина узла – число предков +1 .Глубина дерева – наибольшая глубина всех узлов.

Для реализации древовидных структур используют следующее: struct ttree { tinf inf; ttree *a1; ttree *a2; …. ttree *an; } *proot *p;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]