«списки и сети (деревья и графы) динамические линейные и нелинейные структуры»



Download 61,38 Kb.
Sana17.01.2023
Hajmi61,38 Kb.
#900092
TuriЛабораторная работа
Bog'liq
ПРАКТИЧЕСКАЯ 3 dasturlash


ЛАБОРАТОРНАЯ РАБОТА № 3.
ТЕМА: «СПИСКИ И СЕТИ (ДЕРЕВЬЯ И ГРАФЫ)
ДИНАМИЧЕСКИЕ ЛИНЕЙНЫЕ И НЕЛИНЕЙНЫЕ СТРУКТУРЫ»
ЗАДАНИЕ 1. Реализовать структуру односвязный или двусвязный список на основе пары– значение (указатели и данные). Во всех вариантах предусмотреть динамическое выделение памяти и освобождение неиспользуемых участков. Во всех задачах перед обработкой выводить исходный список и результирующий список.

Заполнить список случайными положительными и отрицательными целыми числами. Удалить из списка все отрицательные элементы.



Если очередной элемент массива отрицателен, то все элементы следующие за ним надо передвинуть на одну ячейку вперед. В результате отрицательный элемент как бы затрется, а учитываемую длину массива надо уменьшить на единицу.
Поскольку непредсказуемо могут меняться как длина массива, так и счетчик-индекс элементов, то цикл for не подходит. Когда встречается отрицательный элемент, то индекс не увеличивается, т.к. на это место записывается новый элемент, который будет проверяться в следующей итерации цикла. При этом надо уменьшить значение длины массива.
Если же элемент не отрицательный, то надо перейти к следующему элементу, т.е. увеличить индекс и при этом не уменьшать длину массива.
#include < stdio.h>
#define N 10
main() {
int a[N], i,j, m;
srand(time(NULL));
for (i=0; i< N; i++) {
a[i] = rand()%10 - 5;
printf("%d ", a[i]);
}
printf("\n");
i = 0;
m = N;
while (i < m)
if (a[i] < 0) {
m -= 1;
for (j=i; j < m; j++)
a[j] = a[j+1];
} else
i += 1;


for (i=0; i< m; i++) {
printf("%d ", a[i]);
}
printf("\n");
}



ЗАДАНИЕ 2. Определить новую динамическую структуру данных (бинарное дерево на основе нелинейного связного списка). Описать стандартные операции-процедуры по работе со структурой данных (добавления нового элемента, обхода дерева, удаления элемента, визуализации дерева и индивидуального задания).
Вершины дерева вещественные числа. Описать процедуру, которая строит список, узлами которого являются вершины с положительными значениями


#include
using namespace std;


int tabs = 0; //Для создания отступов
int kol_vo = 0;
//Кол-во отступов высчитывается по кол-ву рекурсивного вхождения при выводе в фукцию print


//Структура ветки
struct Branch
{
int Data; //Поле данных
Branch* LeftBranch; //УКАЗАТЕЛИ на соседние веточки
Branch* RightBranch;
};


//Функция внесения данных
void Add(int aData, Branch*& aBranch)
{
//Если ветки не существует
if (!aBranch)
{ //создадим ее и зададим в нее данные
aBranch = new Branch;
aBranch->Data = aData;
aBranch->LeftBranch = 0;
aBranch->RightBranch = 0;
return;
}
else //Иначе сверим вносимое
if (aBranch->Data > aData)
{ //Если оно меньше того, что в этой ветке - добавим влево
Add(aData, aBranch->LeftBranch);
}
else
{ //Иначе в ветку справа
Add(aData, aBranch->RightBranch);
};
}


//Функция вывода дерева
void print(Branch* aBranch)
{
if (!aBranch) return; //Если ветки не существует - выходим. Выводить нечего
tabs += 5; //Иначе увеличим счетчик рекурсивно вызванных процедур
//Который будет считать нам отступы для красивого вывода


print(aBranch->LeftBranch); //Выведем ветку и ее подветки слева
for (int i = 0; i < tabs; i++) cout << " "; //Потом отступы
cout << aBranch->Data << endl; //Данные этой ветки


print(aBranch->RightBranch);//И ветки, что справа
tabs-= 5; //После уменьшим кол-во отступов
return;
}


void pr_obh(Branch*& aBranch)
{
if (NULL == aBranch) return; //Если дерева нет, выходим

cout << aBranch->Data << endl; //Посетили узел
pr_obh(aBranch->LeftBranch); //Обошли левое поддерево
pr_obh(aBranch->RightBranch); //Обошли правое поддерево
}


int main()
{
setlocale(LC_ALL, "rus");
Branch* Root = 0;
int vel;
int element;
int k;


cout << "Введите кол-во элементов для будущего дерева: ";
cin >> vel;
cout << endl;


for (int i = 0; i < vel; i++)
{
Add(rand() % 201 + (-100), Root);
}


cout << "Вывод бинарного дерева: " << endl;
print(Root);
cout << endl;


cout << "Прямой обход бинарного дерева: " << endl;
pr_obh(Root);
cout << endl;


return 0;
}

Download 61,38 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish