Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Тема Абстрактний тип даних rdquo;Деревоrdquo; Підготував студент групи СП11 Cрогий Юрі

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 20.5.2024

Мiнiстерство освіти і науки України

Тернопільський національний технічний університет імені Івана Пулюя

Факультет комп'ютерно-інформаційних систем і програмної інженерії

Кафедра програмної інженерії

ЗВІТ

до лабораторної роботи №5

з навчальної дисципліни «Алгоритми та структури даних»

Тема: Абстрактний тип даних ”Дерево”

 

Підготував:

студент групи СП-11

Cрогий Юрій Павлович

Тернопіль 2013

Мета роботи: засвоїти теоретичний матеріал та набути практичних навичок по роботі з абстрактним типом даних “Дерево”

Короткі теоретичні відомості:

Дерево (tree) – це сукупність елементів, які називаються вузлами та відношень між цими елементами, що утворюють ієрархічну структуру дерева.

Початковий вузол дерева називається його коренем (root).

Вузли в дереві, як і елементи в списку, можуть бути даними довільного типу.

 

1. Побудувати графічно дерево для виразу 

(c+b)*(a+c)+(b+c^2)

2. Реалізувати (з використанням функцій АТД Tree), функції для обходу дерев та привести список обходу вузлів дерева побудованого в п.1

          1 – у прямому порядку

          2 – у зворотньому порядку

          3 – у симетричному порядку

3. Реалізувати (з використанням мови програмування) основні функції для АТД Tree (PARENT, LEFTMOST_CHILD, RIGTH_SIBLING, LABEL, ROOT).

#include <iostream>

#include <locale.h>

using namespace std;

const int maxn=13;

struct node

{

 char label;

 int lmc;

 int rc;

 int idx;

};

void in(node []);

int parent(int, node[]);

int root();

int left(int, node[]);

int right(int, node[]);

char label(int, node[]);

void preorder(int, node[]);

void postorder(int, node[]);

void inorder(int, node[]);

void main()

{

setlocale(LC_ALL, "Ukrainian");

node tree[maxn];

in(tree);

cout<<"Прямий обхід:"<<endl;

preorder(0,tree);

cout<<endl<<"Зворотній обхід:"<<endl;

postorder(0,tree);

cout<<endl<<"Симетричний обхід:"<<endl;

inorder(0,tree);

 

 

}

void in(node tree[maxn])

{

tree[0].label='+';

tree[1].label='*';

tree[2].label='+';

tree[3].label='+';

tree[4].label='+';

tree[5].label='b';

tree[6].label='^';

tree[7].label='c';

tree[8].label='b';

tree[9].label='a';

tree[10].label='c';

tree[11].label='c';

tree[12].label='2';

 for (int i=0; i<maxn; i++)

{

 tree[i].lmc=NULL;

 tree[i].rc=NULL;

}

tree[0].lmc=1;

tree[0].rc=2;

tree[1].lmc=3;

tree[1].rc=4;

tree[2].lmc=5;

tree[2].rc=6;

tree[3].lmc=7;

tree[3].rc=8;

tree[4].lmc=9;

tree[4].rc=10;

tree[6].lmc=11;

tree[6].rc=12;

 for (int i=0; i<maxn; i++)

{

 tree[i].idx=i;

}

}

int root()

{

 return 0;

}

int left(int c, node t[maxn])

{

 return t[c].lmc;

}

int right(int c, node t[maxn])

{

 return t[c].rc;

}

char label(int c, node t[maxn])

{

 return t[c].label;

}

int parent(int c, node t[maxn])

{

 if (c==0){ cout<<"Це корінь"; return 0;}

 else

 for (int i=0; i<maxn; i++)

  if (t[left(i,t)].idx==t[c].idx ||  t[right(i,t)].idx==t[c].idx) return i;

}

void preorder(int i, node t[maxn])

{

cout<<t[i].label;

 if (t[i].lmc!=NULL && t[i].rc!=NULL)

{

 preorder(t[i].lmc,t);

 preorder(t[i].rc,t);

}

 

}

void postorder(int i, node t[maxn])

{

 

 if (t[i].lmc!=NULL  && t[i].rc!=NULL)

{

 postorder(t[i].lmc,t);

 postorder(t[i].rc,t);

}

cout<<t[i].label;

}

void inorder (int i, node t[maxn])

{

 if (t[i].lmc==NULL  && t[i].rc==NULL) cout<<t[i].label;

 else

{

 inorder(t[i].lmc,t);

 cout<<t[i].label;

 inorder(t[i].rc, t);

}

}

4. Знайти код Хаффмана для повідомлення, що складається з символів [abcde] з наступними ймовірностями:

a:1111
b:1110
c:10
d:0

e:110

5. Написати програму по кодування та декодуванню повідомлення відповідно до отриманих кодів з п.4

#include <iostream>

#include <locale.h>

using namespace std;

const int k=9;

struct elem

{

 char c;

 int lc;

 int rc;

 int parent;

 int idx;

 bool code;

};

void code(char, elem[]);

void decode(char [], elem[]);

void main()

{

setlocale(LC_ALL, "Ukrainian");

elem t[k];

 for(int i=0; i<k; i++)

{

 t[i].idx=i;

 t[i].c='^';

 t[i].lc=-1;

 t[i].rc=-1;

 t[i].code=-1;

}

t[2].c='d';

t[4].c='c';

t[6].c='e';

t[7].c='a';

t[8].c='b';

 

t[0].lc=1;

t[0].rc=2;

t[1].lc=3;

t[1].rc=4;

t[3].lc=5;

t[3].rc=6;

t[5].lc=7;

t[5].rc=8;

 

t[0].parent=-1;

t[1].parent=0;

t[2].parent=0;

t[3].parent=1;

t[4].parent=1;

t[5].parent=3;

t[6].parent=3;

t[7].parent=5;

t[8].parent=5;

 for (int i=0; i<k; i++)

{

 if (t[i].lc!=-1)

  t[t[i].lc].code=1;

 if (t[i].rc!=-1)

  t[t[i].rc].code=0;

}

cout<<"Введіть стрічку для кодування"<<endl;

 char s[10];

gets(s);

 int b=0;

 while(s[b]!='\0')

{

 code(s[b],t);

 b++;

}

cout<<endl;

cout<<"Введіть код для декодування"<<endl;

 char d[40];

gets(d);

decode(d,t);

cout<<endl;

system("pause");

}

void code(char c, elem t[k])

{

 int i=0;

 while (c!=t[i].c)

{

 i++;

}

 bool r[5];

r[0]=t[i].code;

 int k=i;

 int j=1;

 while (t[k].parent!=-1)

{

 r[j]=t[t[k].parent].code;

 k=t[t[k].parent].idx;

 j++;

}

 for (int h=j-2; h>=0; h--)

{

 cout<<r[h];

}

 

}

void decode(char c[40], elem t[k])

{

 int p=0;

elem g=t[0];

 int i=0;

 while (c[i]!='\0')

{

 if (g.lc!=-1)

 {

  if (c[i]=='1')

  {

   g=t[g.lc];

  }

  else

  {

   g=t[g.rc];

  }

  i++;

 }

 else

 {

  cout<<g.c; g=t[0];

 }

}

cout<<g.c;

}

Висновок.

Я набув навичок щодо реалізації АТД «Дерево» та дерева Хаффмана.




1. Ек92 Романюк ЛВ
2. Особенности выращивания зерновых культур
3. титульний аркуш 2 зміст 3 за необхідності ~ перелік умовних позначень скорочень 4 вступ 5 основну част
4. Организация производства хлебобулочных изделий
5. Специфическое назначение и роль налогов в доходах бюджета
6. на тему- Механизмы индивидуального экстренного приспособления
7. В кольце бульваров
8. Варіанти 110 п-п Показники
9. КРЕПЫШ МУНИЦИПАЛЬНОГО ОБРАЗОВАНИЯ ГОРОД НОЯБРЬСК 629800 г
10. тематичних карт11 1
11. Телеанонс Ведущая
12.  200 г полное наименование организации с указанием ее организационноправовой
13. Строение животной клетки химический стакан перекись водорода 3 Н2О2 клубень картофеля нож
14. Конец Люси конец теории антропогенеза
15. Бюджет
16. тематике за первое полугодие 20132014 учебного года 10 класс Вариант 7 Ответом на задания В1~В10 должно б
17. арт; миксология К участию в конкурсе допускаются мужчины и женщины достигшие возраста 18 лет
18. Плановое их ухудшение особенно в период строительства социализма привело к низкой цене труда и экономичес
19. реферат дисертації на здобуття наукового ступеня кандидата медичних наук Вінниця ~
20. тематическое программирование Общая задача линейного программирования ЗЛП- Здесь 1 называется си