Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л7. Динамічні структури обєктів (ДСО).doc
Скачиваний:
3
Добавлен:
17.08.2019
Размер:
163.33 Кб
Скачать

Приклад 1. Операції зі стеками

#include <iostream.h>

#include <conio.h>

typedef struct StackData {

int Data;

StackData *Next;

} TStackData, *PStackData;

typedef class CStack {

private:

PStackData Top;

public:

CStack ( ) {Top = 0;};

~CStack( )

{

PStackData temp;

while (Top != 0) {

temp = Top->Next;

delete Top;

Top = temp; };

};

void Push(int);

int Pop(); // вилучає елемент зі стеку

int Count () ;

void Print();

} TStack, *PStack;

void CStack::Push(int Data){

PStackData temp = new TStackData;

temp->Data = Data;

temp->Next = Top;

Top = temp;

}

int CStack:: Pop (){ // повертає зі стеку

// самий верхній елемент

int Itemp=Top->Data;

PStackData Temp=Top;

Top=Top->Next;

delete Temp;

return Itemp;

}

int CStack::Count ()

{ int iCount=0;

PStackData temp = Top;

while (temp != 0) // рахуємо, поки temp!=0

{ iCount++; // і додаємо одиницю

temp=temp->Next ; } // і він тоді вказує на

// наступний елемент; рахуємо, +1 і на наступний

return iCount;

}

void CStack:: Print () // роздрукувати стек

{

PStackData PTmp = Top;

while (PTmp!=0)

{ cout << PTmp->Data << '\t' ; // t – крок

// табуляції, переміщає нас на t позицій

// вправо від заданої

PTmp=PTmp->Next; };

cout<<endl;

}

int main () {

PStack Stack = new TStack; // після цієї операції //відразу спрацьовує конструктор

Stack->Push (5); // Заганяємо в стек цифри

Stack->Push (4); // - || -

Stack->Push (3); // - || -

Stack->Print(); // роздрукуються 3 4 5

cout << "\n Count:"<< Stack->Count() << endl;;

cout << Stack->Pop() << endl; // потім видалиться 3?

Stack->Print () ; // і роздрукує 4 5

getch();

}

Приклад 2. Операції з чергами. #include <iostream.h>

#include <conio.h>

typedef struct QueData

{ int Data;

QueData *Next; }

TQueData, *PQueData; // ім’я перейменування,

// тип вказівників на структури

typedef class CQue {

private:

PQueData First, Last; // PQueData First –

// вказівник на 1-ий елемент, Last – на останній

public:

CQue() {First = Last = 0; }; // черга порожня,

// якщо так, тоді створюється один вказівник

~CQue () // first -> 1 | 0 <- last first=last

{ PQueData temp;

while (First != 0)

{ temp = First->Next;

delete First;

Fixst = temp; };

};

void Add(int);

double Average();

void Print();

} TQue, *PQue;

void CQue::Add(int Data) {

if (Last == 0)

{ First = Last = new TQueData;

First->Data = Data;

First->Next = 0; }

else

{ Last->Next = new TQueData;

Last = Last->Next;

Last->Data = Data;

Last->Next = 0; }

} ;

double CQue::Average() {

int iSum=0, iCount=0;

PQueData temp = First;

while (temp !=0)

{ iSum+=temp->Data;

temp=temp->Next ;

iCount++; };

return ((double)iSum)/iCount;

};

void CQue::Print(){

PQueData PTmp=First;

while (PTmp!=0)

{ cout<< PTmp->Data<<'\t';

PTmp=PTmp->Next; };

}

int main() {

PQue Que = new TQue;

Que->Add(5);

Que->Add(4);

Que->Add(3);

Que->Print();

cout << "\nSeredne:" << Que->Average();

getch(); }

Приклад 3. Двійкові дерева.

// файл btree.h

class BTREE // binary tree

{

int data;

BTREE *left, *right; public:

BTREE (int, BTREE* =0, BTREE* =0); ~BTREE(); friend BTREE* add(BTREE*,int); void print (); void printLVR(); void printRVL();

};

//файл btree.cpp #include <iostream.h>

#include "btree.h"

BTREE::BTREE(int newdata,BTREE *p_left, BTREE *p_right)

//створює нове дерево, ініціалізує його корінь та додає

//ліве і праве піддерева, які можуть бути порожніми

{

left=p_left;

right=p_right;

data=newdata;

}

BTREE::~BTREE()

{ if (left) delete left;

if (right) delete right; }

void BTREE::print() {

cout<<data;

if (left || right) cout <<'(';

if (left) left->print();

if (right)

{ cout<<',';

right->print(); }

if (left || right) cout<<')'; }

void BTREE::printLVR()

{ if (left) left->printLVR();

cout<<data<<',';

if (right) right->printLVR() ; }

void BTREE::printRVL()

{ if (right) right->printRVL() ;

cout<<data<<',';

if (left) left->printRVL() ; }

BTREE* add(BTREE* root,int newdata)

{ if (!root) root=new BTREE(newdata);

else

if (newdata<root->data)

root->left=add(root->left, newdata) ;

else root->right=add(root->right,newdata);

return root; }

void main()

{

int i; BTREE *p=0;

do {

cin>>i;

if (i) p=add(p,i);

}

while (i!=0);

p->print () ;

cout<<"\b \n"; p->printLVR();

cout<<"\b \n"; p->printRVL();

cout<<"\b \n";

}

15

23

7

21

50

0

15(7,23(21,50) .// дужковий

7,15,21,23,50 // L Root R

50,23,21,15,7 // R Root L

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