Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Andrew Ezhguroff                     2:5020/400     08 Apr 2002  14:42:28
 To : Alexey Zhivotov
 Subject : Re: Обход дерева каталогов без рекурсии
 -------------------------------------------------------------------------------- 
 
 Привет! "Alexey Zhivotov" <Alexey.Zhivotov@p9.f16.n5007.z2.fidonet.org>
 сообщил(а):
 
  AE>> Берешь рекурсивный алгоритм и меняешь рекурсию на стек:
  AE>> вызов подпрограммы - занесение в стек
  AE>> возврат из подпрограммы - извлечение из стека
  AZ>   Да про это я знаю, мне надо именно *пример*.
 
 Hапример что-то вроде этого (печатает целочисленные значения, хранящееся в
 узлах дерева). Обход дерева осуществляется функцией Nodes, работа программы
 не проверялась.
 
 #include <stdio.h>
 #include <stdlib.h>
 
 struct _Tree{
   struct _Tree *Left, *Right;
   int Val;
 };
 
 struct _Stack{
   struct _Tree  *Node;
   struct _Stack *Ptr;
 } *Stack = 0;
 
 void Sack_Up(struct _Tree *Data){
   struct _Stack *Temp=malloc(sizeof(struct _Stack));
   Temp->Node=Data;
   Temp->Ptr =Stack;
   Stack=Temp;
 }
 
 struct _Tree *Stack_Down(void){
   if(Stack){
     struct _Stack *Temp=Stack;
     struct _Tree  *Data=Temp->Node;
     Stack=Temp->Ptr;
     free(Temp);
     return Data;
   }else{
     return 0;
   }
 }
 
 void Nodes(struct _Tree *Tree){
   while(Tree){
     if(Tree->Right)Stack_Up(Tree->Right);
     printf("%d\n", Tree->Val);
     Tree=Tree->Left? Tree->Left: Stack_Down();
   }
 }
 
 С уважением, Андрей.
 -- 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.Mail.Ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Обход дерева каталогов без рекурсии   Andrew Ezhguroff   08 Apr 2002 14:42:28 
Архивное /ru.algorithms/648825e6a090.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional