список структуры.doc
.docДЕРЕВО
#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 ();
}