plik : program.h
// drzewo BST
// PROGRAM GŁÓWNY
#include <stdio.h>
int main(){
#include <conio.h>
struct W * n, *z;
#include <stdlib.h>
n=czytaj_tree("pr_01.txt");
#include "BST.h"
printf("\n\tD R Z E W O n\n\n\n");
#include "uni.h"
druk_tree(n,0);
printf("\n\n\nglebokosc
n=%d\n\n\n",deep_tree(n));
printf("\n\tD R Z E W O z\n\n\n"); z=kopia_tree(n);
druk_tree(z,0);
printf("\n\n\nglebokosc
z=%d\n\n\n",deep_tree(z));
zapisz_tree(z,"drzewo.txt","\tD R Z E W O
Z\n\n");
koniec();
return 0;
}
plik : uni.h
// Funkcje pomocnicze
// Funkcja min zwracająca minimum
#ifndef UNI
int min(int , int );
#define UNI
//Funkcja dopisująca wartość double
#include <stdio.h>
//do pliku
#include <conio.h>
void dopisz_lf(char *, double );
#include <stdlib.h>
// Funkcja dopisująca znak do pliku
// DEKLARACJE innych funkcji void dopisz_c(char *, char );
//Funkcja zabezpiecza
// Funkcja dopisująca napis do pliku
//przed zamknięciem okna programu
void dopisz_s(char *, char* );
void koniec();
#include "uni.c"
// Funkcja max zwracająca maximum
#endif
int max(int , int );
plik : BST.h
drzewo BST w 5 plikach Podstawy Programowania
// drzewo BST
// Funkcja druk_W drukuje na ekran
#ifndef BST
// zawartość węzła
#define BST
// pokazywanego przez wskaźnik
#include <stdio.h>
void druk_W(struct W * );
#include <conio.h>
// Funkcja dodaj_W wstawia węzeł
#include <stdlib.h>
// o zadanej wartości do drzewa
// STRUKTURA W
// pokazywanego przez wskaźnik
//każdy obiekt typu struct W
void dodaj_W(struct W * , double);
// jest węzłem drzewa BST
//Funkcja drukująca drzewo
//l wskazuje na lewe poddrzewo
//w porządku in-order
//p wskazuje na prawe poddrzewo
void druk_in(struct W *);
//n przechowuje wartość
//d przechowuje liczbe
// Funkcja zwracająca głębokość drzewa
// wszystkich potomków danego węzła
int deep_tree(struct W *);
struct W{
// Funkcja drukująca drzewo bokiem
int d;
void druk_tree(struct W *,int );
double n;
// Funkcja czytająca drzewo z pliku struct W * l;
struct W * czytaj_tree(char * );
struct W * p;
// Funkcja tworząca kopię drzewa
};
struct W * kopia_tree(struct W *);
// Deklaracje funkcji dla struktury W
// Funkcja zapisująca drzewo do pliku
//Funkcja n_W tworzy nowy węzeł
// i zwraca do niego wskaźnik
void zapisuj_tree(struct W *,int ,char *); struct W * n_W(double);
// Funkcja zapisująca drzewo do pliku void zapisz_tree(struct W *,char *, char *);
#include "BST.c"
#endif
drzewo BST w 5 plikach Podstawy Programowania
plik : uni.c
// Funkcje pomocnicze- definicje funkcji // Funkcja dopisująca wartość double
// Funkcja koniec
//do pliku
//zabezpiecza przed przedwczesnym
void dopisz_lf(char *nazwa, double x){
//zamknięciem okna programu
FILE *plik;
void koniec(){
plik=fopen(nazwa,"a");
printf("\nK O N I E C");
fprintf(plik,"%.0lf\n",x);
fflush(stdin);
fclose(plik);
getch();
}
}
// Funkcja dopisująca znak do pliku
// Funkcja max zwracająca maximum z x i y void dopisz_c(char *nazwa, char x){
int max(int x, int y){
FILE *plik;
if(x>y) return x;
plik=fopen(nazwa,"a");
return y;
fprintf(plik,"%c",x);
}
fclose(plik);
}
// Funkcja min zwracająca minimum z x i y int min(int x, int y){
// Funkcja dopisująca napis do pliku if(x<y) return x;
void dopisz_s(char *nazwa, char* x){
return y;
FILE *plik;
}
plik=fopen(nazwa,"a");
fprintf(plik,"%s",x);
fclose(plik);
}
drzewo BST w 5 plikach Podstawy Programowania
plik : BST.c
// drzewo BST
// Funkcja dodaj_W wstawia węzeł
#include "uni.h"
// o wartości t do drzewa
// FUNKCJE dla struktury W
// pokazywanego przez wskaźnik x
void dodaj_W(struct W * t, double x){
//Funkcja n_W tworzy nowy węzeł
struct W* pom;
// i zwraca do niego wskaźnik
int i;
struct W * n_W(double p){
i=1;
struct W *pm;
pom=t;
pm=malloc(sizeof(struct W));
while((pom->l!=NULL || pom->p!=NULL) pm->l=NULL;
&& i!=0) {
pm->p=NULL;
i=0;
pm->n=p;
if(pom->n>x && pom->l!=NULL) {
pm->d=0;
pom=pom->l;
return pm;
i++;
}
}
// Funkcja druk_W drukuje na ekran
if(pom->n<=x && pom->p!=NULL) {
// zawartość węzła
pom=pom->p;
// pokazywanego przez wskaźnik p
i++;
void druk_W(struct W * p){
}
printf("n=%.2lf\n",p->n);
}
printf("d=%d\n",p->d);
if(pom->n>x && pom->l==NULL)
}
pom->l=n_W(x);
if(pom->n<=x && pom->p==NULL) pom->p=n_W(x);
}
drzewo BST w 5 plikach Podstawy Programowania
// Funkcja drukująca drzewo
// Funkcja drukująca drzewo bokiem
// w porządku in-order
void druk_tree(struct W *t,int k){
void druk_in(struct W * p){
int i;
if(p->l!=NULL)
if(t!=NULL) {
druk_in(p->l);
for(i=1;i<=k;i++)
printf("n= %.2lf\td=%d\n",p->n,p->d); if(!(k%2))
if(p->p!=NULL)
k+=3;
druk_in(p->p);
druk_tree(t->p,k+5);
}
if(t->p!=NULL) {
// Funkcja zwracająca głębokość drzewa for(i=0;i<(k+2);i++)
int deep_tree(struct W * t){
printf(" ");
int i;
printf(" /\n");
i=1;
}
if(t->l!=NULL && t->p!=NULL) for(i=0;i<k;i++)
i=i+max(deep_tree(t->l),deep_tree(t->p)); printf(" "); else
printf("%.0lf\n",t->n);
{
if(t->l!=NULL) {
if(t->p!=NULL)
for(i=0;i<(k+2);i++)
i=i+deep_tree(t->p);
printf(" ");
if(t->l!=NULL)
printf(" \\\n");
i=i+deep_tree(t->l);
}
if(t->l==NULL && t->p==NULL) druk_tree(t->l,k+5);
i=1;
}
}
}
return i;
}
drzewo BST w 5 plikach Podstawy Programowania
// Funkcja czytająca drzewo z pliku
// Funkcja zapisująca drzewo do pliku struct W * czytaj_tree(char * nazwa){
void zapisuj_tree(struct W *t,int k,char *n){
struct W *pm;
int i;
int i;
if(t!=NULL) {
double pn;
for(i=1;i<=k;i++)
FILE *plik;
if(!(k%2))
pm=NULL;
k+=3;
plik=fopen(nazwa,"r");
zapisuj_tree(t->p,k+5,n);
if(plik!=NULL) {
if(t->p!=NULL) {
i=fscanf(plik,"%lf",&pn); for(i=0;i<(k+2);i++)
if(i!=-1)
dopisz_c(n,' ');
pm=n_W(pn);
dopisz_s(n," /\n");
while(i!=-1) {
}
i=fscanf(plik,"%lf",&pn); for(i=0;i<k;i++)
if(i!=-1)
dopisz_c(n,' ');
dodaj_W(pm,pn);
dopisz_lf(n,t->n);
}
if(t->l!=NULL) {
}
for(i=0;i<(k+2);i++)
else
dopisz_c(n,' ');
printf("\nBRAK PLIKU %s\n",nazwa); dopisz_s(n," \\\n");
return pm;
}
}
zapisuj_tree(t->l,k+5,n);
}
}
// Funkcja zapisująca drzewo do pliku void zapisz_tree(struct W *t,char *n, char
*tekst){
FILE * plik;
plik=fopen(n,"w");
fprintf(plik,"%s",tekst);
fclose(plik);
zapisuj_tree(t,0,n);
}
drzewo BST w 5 plikach Podstawy Programowania
// Funkcja tworząca kopię drzewa struct W * kopia_tree(struct W *t){
struct W * pp;
pp=n_W(t->n);
if(t->p!=NULL)
pp->p=kopia_tree(t->p);
if(t->l!=NULL )
pp->l=kopia_tree(t->l);
return pp;
}
D R Z E W O n
712
/
600
/
512
/
256
\
150
/
128
\
96
\
72
/
64
\
48
/
32
\
20
/
16
\
10
glebokosc n=6
K O N I E C
drzewo BST w 5 plikach Podstawy Programowania
drzewo BST w 5 plikach Podstawy Programowania