Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Касаткин С., Раткевич И., Травова Н. - Лаборато...doc
Скачиваний:
24
Добавлен:
22.11.2019
Размер:
1.01 Mб
Скачать
  1. Программа, которая работает со стеком.

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

using namespace std;

// структура, которая описывает один узел

struct Node

{

int data;

Node* next;

};

// Функция, которая добавляет элемент в стек

void Push(Node*& first, int num)

// первый параметр – адрес узла на вершине стека

{

Node* token;

if (first==NULL) // если стек пуст

{

first = new Node;

first->next = NULL;

}

else // если стек – не пуст

{

token = new Node;

token->next = first; // привязываем узел к предыдущему

first = token;

}

first->data = num; // записываем элемент данных

}

// -----------------------------------------------------------

// функция, которая считывает значение из текущего узла и перемещается по стеку вниз

int Pop(Node*& token)

{

int num = token->data;

token = token->next;

return num;

}

//------------------------------------------------------------

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

int data[] = {2, -3, 7, 12, 4};

Node *first=NULL, *token = NULL;

// создаем стек из элементов массива

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

Push(first, data[i]);

//Вывод:

token=first;

while (token)

cout << Pop(token)<<" ";

cout <<endl;

_getch();

return 0;

}

  1. Программа, которая работает с деревом.

#include<iostream>

#include<conio.h>

#include<windows.h>

using namespace std;

// структура, которая описывает один узел дерева

struct Node

{

double number; // элемент данных

Node* Left; // указатель на левую ветвь

Node* Right; // указатель на правую ветвь

};

void Write(double, Node*&); // записывает узел

void Read(Node*); // считывает элемент данных

//-------------------------------------------------------------------------

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

Node* root=NULL;

double x[] = {5, 2, 8, 7, 2, 9};

cout << "Исходная последовательность:\n";

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

cout << x[i] <<" ";

cout << endl;

// создаем дерево

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

Write(x[i], root);

cout <<"Отсортированная последовательность:\n";

// выводим дерево на экран:

Read(root);

cout<<endl;

_getch();

return 0;

}

// ------------------------------------------------------------------------

// рекурсивная функция, которая создает новый узел дерева

void Write(double x, Node*& pNode)

// параметры: элемент данных и адрес исходного узла

{

if (!pNode) // если дерева еще нет

{

pNode = new Node;

pNode->number = x;

pNode->Left = pNode->Right = NULL;

}

else /* в противном случае привязываем узел к дереву так,

чтобы все элементы слева были меньше всех элементов справа*/

{

if (x >= pNode->number)

Write(x, pNode->Right); //Спускаемся вправо

else

Write(x, pNode->Left); //спускаемся влево

}

}

/* рекурсивная функция, которая считывает элементы данных

(данные будут выведены на экран в порядке возрастания: */

void Read(Node* token)

{

if (token->Left)

Read(token->Left);

cout << token->number<<" ";

if (token->Right)

Read(token->Right);

}