Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Министерство образования и науки Российской Федерации
Новосибирский государственный технический университет
Кафедра ПМт
Лабораторная работа №3
по дисциплине
«Структуры данных и алгоритмы»
Факультет: ПМИ
Группа: ПМ-85
Студент: Трифонова А.С.
Преподаватель: Еланцева И.Л.
Новосибирск-2009
1. Условие задачи
В заданном непустом бинарном дереве подсчитать число вершин на k-ом уровне, считая корень вершиной нулевого уровня
2. Анализ задачи
1) Дано: d-дерево; дерево := (значение, левое дерево, правое дерево), kÎN
Левое дерево := дерево|пусто
Правое дерево := дерево|пусто значениеÎ{символ}
2) Результат: hÎN
3) Способ решения:
создать_очередь(st1)
создать_очередь(st2)
в _очередь (st2,a)
при k= заданный уровень
повторять
st1=st2;
создать очередь(st2)
повторять
p=из_очереди(st1,a);
если (левое дерево!=NULL) в_очередь(st2,левое дерево)
если (правое дерево!=NULL) в_очередь(st2,правое дерево)
пока(!пуста очередь (st1))
n=n+1
пока n!=k
!пуста очередь (st2)
В задаче можно выделить подзадачу ввода бинарного дерева
3.Структура основных входных и выходных данных
Внешнее представление входных данных
в файле «tree.txt» последовательностью символов представлено дерево
Внутреннее представление входных данных
бинарное динамическое дерево представлено нелинейным иерархическим списком
Элемент дерева представлен структурой:
struct btree
{ char elem; btree *left,*right};
Внешнее представление выходных данных
выходные данные представлены в файле «rezz.txt» целым числом h
Внутренне представление выходных данных
float h
4. Алгоритм решения задачи
5.Текст программы
TRIF2
struct btree
{ char elem;
btree *left,*right;};
struct dline
{ btree *elem;
dline *next,*pred;};
void add_elem(dline*b,btree *ss)
{ dline *x;
b=b->pred;
x=new dline;
x->elem=ss;
x->pred=b;
x->next=b->next;
b->next->pred=x;
b->next=x;
}
int pust(dline *b)
{if (b==b->next) return 1;
return 0;}
int outline (dline *b,btree **ss)
{dline *r;
r=b->next; *ss=r->elem;
b->next=r->next;
r->next->pred=b;
delete r;return 1;
}
void New_line(dline**b)
{(*b)=new dline;
(*b)->next=(*b);
(*b)->pred=(*b);
}
void Print_line (dline*b)
{ dline*k;
FILE*fp;
k=b;
fp=fopen("rez1.txt","a");
do
{
fprintf(fp,"%c",b->next->elem);
b=b->next;
}
while (b->next!=k);
fclose(fp);
}
главный модуль
#include <stdio.h>
#include "trif2.cpp"
FILE *fp;
btree *build_tree()
{ char s;
btree *d;
fscanf (fp,"%c",&s);
switch(s)
{case '(':{ d=new btree;
fscanf (fp,"%c",&s); d->elem=s;
d->left=build_tree();
d->right=build_tree(); fscanf (fp,"%c",&s);
return d;}
case '0': return NULL;
case ',': d=build_tree(); return d;
}
}
void main ()
{ FILE *lk;
int k,p,h,n=0;h=0;
dline *st1,*st2;
fp=fopen("tree.txt","r");
lk=fopen("rezz.txt","w");
btree *a=build_tree();
fscanf(fp,"%d",&k);
New_line(&st1);
New_line(&st2);
add_elem(st2,a);
while((n!=k)&&(pust(st2)!=1))
{ st1=st2; New_line(&st2);
while (pust(st1)==0)
{p=outline (st1,&a);
if (a->left!=NULL) add_elem(st2,a->left);
if (a->right!=NULL) add_elem(st2,a->right);
}
n++;
}
if (k==n ) {while (pust(st2)==0)
{p=outline(st2,&a);
h++;
}
fprintf(lk,"%d\n",h);
}
else fprintf(lk,"takogo urovnja net\n");
fclose(lk);
fclose(fp);
}
6.Набор тестов
№ |
Дано |
Результат |
Примечания |
|
дерево |
номер уровня |
|||
1 |
(a,(b,(d,0,0),0),(c,(e,0,(g,0,0)),(f,(h,0,0),(i,0,0)))) |
0 |
1 |
на 0-ом уровне всегда одна вершина - корень дерева. |
2 |
(a,(b,(d,0,0),0),(c,(e,0,(g,0,0)),(f,(h,0,0),(i,0,0)))) |
2 |
3 |
общий случай |
3 |
(a,(b,(d,0,0),0),(c,(e,0,(g,0,0)),(f,(h,0,0),(i,0,0)))) |
6 |
takogo urovnja net |
k>n, такого уровня в данном дереве нет |
7.Результаты работы программы
На всех тестах программа выдала желаемый результат, значит, работает корректно.
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.