Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

список структуры.doc

.doc
Скачиваний:
5
Добавлен:
20.05.2014
Размер:
53.25 Кб
Скачать

ДЕРЕВО

#define NODE struct node

NODE

{ int info;

NODE *left,*right;

};

NODE *newn(int x)

{ /* создание нового узла, с числом х в поле данных */

NODE *uk;

uk=(NODE*) malloc(sizeof(NODE)); /* выделение памяти */

uk->info=x; /* запись числа в поле данных */

uk->left=uk->right=NULL; /* указатели на левого и правого сына = 0 */

return(uk);

}

void setleft(NODE*p, int x)

{ /* присоединение числа х к узлу р слева */

p->left=newn(x);

}

void setright(NODE*p, int x)

{ /* присоединение числа х к узлу р справа */

p->right=newn(x);

}

NODE *form() /* формирование дерева */

{

int n;

NODE *der=NULL,*next,*tek; /* указатель на корень, текущий и следующий */

puts("Vvedite dannie - konec vvoda - bukva");

if(scanf("%d",&n)==1) /* если данные успешно считаны */

{

der=newn(n); /* формирование корня */

while(scanf("%d",&n)==1) /* пока есть данные */

{

next=tek=der;

while (next!=NULL) /* поиск узла, к которому подключаем n */

{

tek=next;

if (n<tek->info)

next=tek->left;

else

next=tek->right;

}

if(n<tek->info) /* присоединение слева или справа */

setleft(tek,n);

else

setright(tek,n);

}

}

return der;

}

/* вывод дерева на экран */

void printder(NODE *der,int x, int y, int d)

{

if (! der )

return;

gotoxy(x,y); /* курсор помещается на знакоместо с коорд (x,y) */

printf("%d",der->info); /* печать числа */

if (der->left) /* обход левого поддерева если оно не пустое */

printder(der->left,x-d,y+2,d/2);

if (der->right) /* обход правого поддерева если оно не пустое */

printder(der->right,x+d,y+2,d/2);

}

СПИСОК

#define Lmax 20

#define STUL struct stu

#define CLR while (fgetc (f) != '\n')

STUL

{

char cvet[Lmax];

int visota;

struct

{

char city[Lmax];

char zavod[Lmax];

char fam[Lmax];

}

izgot;

char mater[Lmax];

STUL *next; /* поле указателя на следующую запись */

};

/* формирование стека стульев. на выходе - имя входного файла */

STUL *stack (char name[])

{

STUL *tek, *stack = NULL; /* изначально список пуст */

FILE *f;

f = fopen (name, "r");

if (f == 0)

puts ("File not found!!!");

else

{

while (! feof (f))

{

/* выделение памяти для новой записи */

tek = (STUL*)malloc (sizeof (STUL));

if (fgets (tek->cvet, Lmax, f))

{

/* другой способ замены '\n' на '\0' */

tek->cvet[strlen (tek->cvet) - 1] = '\0';

fscanf (f, "%d", &tek->visota);

CLR;

fgets (tek->izgot.city, Lmax, f);

tek->izgot.city[strlen (tek->izgot.city) - 1] = '\0';

fgets (tek->izgot.zavod, Lmax, f);

tek->izgot.zavod[strlen (tek->izgot.zavod) - 1] = '\0';

fgets (tek->izgot.fam, Lmax, f);

tek->izgot.fam[strlen (tek->izgot.fam) - 1] = '\0';

fgets (tek->mater, Lmax, f);

tek->mater[strlen (tek->mater) - 1] = '\0';

tek->next = stack;

stack = tek;

}

}

free (tek);

}

return (stack); /* возвращается указатель на вершину стека */

}

/* вывод списка в файл */

void vivod (STUL* stack, char name[])

{

FILE *f2 = fopen (name, "w");

if (! stack)

{

fprintf (f2, " spisok posle ydalenija pust \n");

}

else

{

fprintf (f2, " spisok posle udalenija \n");

/* вывод списка в файл */

while (stack != NULL)

{

fprintf (f2, "cvet: %s\n", stack->cvet);

fprintf (f2, "visota: %d\n", stack->visota);

fprintf (f2, "city: %s\n", stack->izgot.city);

fprintf (f2, "zavod: %s\n", stack->izgot.zavod);

fprintf (f2, "fam: %s\n", stack->izgot.fam);

fprintf (f2, "mater: %s\n", stack->mater);

stack = stack->next; /* движение по списку */

}

}

fclose (f2);

СТРУКТУРЫ

/* пропуск символов до конца строки */

#define CLR while (getchar () != '\n')

/* максимальное число структур */

#define Kmax 10

/* максимальная длина строки*/

#define Lmax 81

#define TV struct tv

#define PROIZV struct proizv

PROIZV

{

char gorod [Lmax];

char zavod [Lmax];

char fam [Lmax];

};

TV

{

char name [Lmax];

char color;

PROIZV pr;

int price;

int diag;

};

/* ввод массива телевизоров */

void input (TV *tv, int *k)

{

int i;

do

{

printf ("Vvedite koli4esvo televizorov ");

scanf ("%d", k); /* k - указатель на количество структур */

}

while (*k <= 0 || *k > Kmax);

printf ("%d\n", *k);

CLR; /* необходим пропуск символов до конца строки, т.к. дальше */

/* функци gets - читаетс строка */

for (i = 0; i < *k; i++)

{

printf ("Televizor # %d\n", i+1);

printf ("Nazvanie: ");

gets (tv[i].name);

printf ("Cena: ");

scanf ("%d", &tv[i].price);

printf ("Razmer po diagonali: ");

scanf ("%d", &tv[i].diag);

CLR; /* цветной или ч\б обозначаетс одной буквой (ц или ч) */

printf ("izobra#enie [c(cvetnoj) ili m(monoxromnij)]: ");

tv[i].color = getchar ();

CLR; /* пропуск символа '\n' */

printf ("Gorod: ");

gets (tv[i].pr.gorod);

printf ("Zavod: ");

gets (tv[i].pr.zavod);

printf ("Familija: ");

gets (tv[i].pr.fam);

printf ("\n");

}

printf ("Vvod televizorov okon4en \n");

getch ();

}

/* Вывод массива телевизоров */

void output (TV *tv, int k)

{

int i;

//clrscr ();

printf ("\nBili vvedeni televizori: \n\n");

for (i = 0; i < k; i++)

{

printf ("Televizor # %d\n", i+1);

printf ("Nazvanie: %s\n", tv[i].name);

printf ("Cena: %d\n", tv[i].price);

printf ("Razmer po diagonali: %d\n", tv[i].diag);

printf ("Cvetnij ili monoxromnij: %c\n", tv[i].color);

printf ("Gorod: %s\n", tv[i].pr.gorod);

printf ("Zavod: %s\n", tv[i].pr.zavod);

printf ("Familija: %s\n", tv[i].pr.fam);

printf ("\nNa#mite lubyu klaviwy dlja prodol#enija prosmotra \n\n");

getch (); /* ожидпние нажати клавиши */

}

//clrscr ();

printf ("Vivod okon4en \n");

printf ("Na#mite lubyu klaviwy \n\n");

getch ();

}