Red de conocimiento informático - Aprendizaje de código fuente - Preguntas sobre programación de estructuras de datos sobre pila

Preguntas sobre programación de estructuras de datos sobre pila

#include "stdio.h"

#include "stdlib.h"

#define NULL 0

#define m 5

nodo de estructura

{

int elem;

nodo de estructura *lchild, *rchild; ;

nodo de estructura *T, *p, *q;

nodo de estructura* Eliminar(nodo de estructura*t);

void EliminarNodo(nodo de estructura* t);

void insertnode(struct node*t, int kx);

void postordertraverse(struct node *t);

int searchelm(struct node *t, int k);

int set_key();

void principal()

{

int x, i= 0, L[m], clave, encontrada;

printf("1********** genera un árbol de clasificación binario\n");

printf ("2************Recorrido en orden\n");

printf("3************Buscar elemento\n"

do{

printf("Seleccione: ";

key=set_key();

switch(clave); )

{

caso 1:

T=(struct node*)malloc(sizeof(struct node));

T -gt; lchild=NULL;

T-gt; rchild=NULL

para(i=0; ilt; m; i )

{

printf("Ingrese los datos dth: ", i 1);

scanf("d", amp; L[i]); /p>

T-gt;elem=L[0];

for(i=1;ilt;m;i)

insertnode(T,L[ i ]);

break;

caso 2:

printf("Recorrido a mitad de secuencia: "); ;

printf("\n");

break;

default:

printf("Ingrese el elemento a buscar para: ");

scanf("d",amp;x);

found=searchelm(T,x);

if(found==0)

printf("No existe tal elemento\n");

else

{

DeleteNode( T);

if(T==NULL)

printf("Elimine el elemento y el árbol de clasificación estará vacío"); >

printf("Eliminar el elemento, recorrer la secuencia: ");

postordertraverse(T);

printf("\n"); p > }

}

}mientras(1);

}

void insertnode(struct node*t, int kx)

{

estructura nodo*t1

if(t)

{

if(kxlt; t -gt;elem)

{

if(!(t-gt;lchild))

{

t1=( nodo de estructura*)malloc(sizeof(nodo de estructura));

t1-gt; elem=kx

t-gt; t1 -gt; lchild=NULL;

t1-gt; rchild=NULL

}

else

insertnode(t- gt ; lniño, kx);

}

else

{

if(!(t-gt;rchild))< / p>

{

t1=(struct node*)malloc(sizeof(struct node));

t1-gt;elem=kx;

t1-gt;elem=kx;

t-gt;rchild=t1;

t1-gt;lchild=NULL;

t1-gt ; rchild=NULL;

}

else

insertnode(t-gt; rchild, kx); >

}

}

void postordertraverse(struct node *t)

{

if(t!=NULL)

{

postordertraverse(t-gt;lchild);

printf("d ", (*t).elem);

postordertraverse(t-gt;rchild);

}

}

int searchelm(struct node *t, int k)

p>

{

int bandera=0

p=q=t

mientras(q)

{

if(kgt; q-gt; elem)

{

p=q

q=q-gt; ;

}

else if(klt; (q-gt;elem))

{

p=q; p>

q=q-gt;lchild;

}

else

{

flag=1;

p>

descanso

}

}

retorno(bandera);

void DeleteNode(struct node*t)

{

struct nodo *s; /p>

{

s=Eliminar(T);

T=s

}

más

{

s=Delete(q);

if(p-gt;rchild==q)

p-gt;rchild =s;

else

p-gt;lchild=s;

}

}

estructura nodo* Eliminar(estructura nodo* t1)

{

estructura nodo*p1, *p2, *t

t=t1;

if(t- gt;rchild!=NULL)

{

t=t-gt;rchild;

p2=p1=t;

while(p1!=NULL)

{

p2=p1;

p1=p1-gt

p>

}

p2-gt; lchild=t1-gt;

}

else if(t-gt; lchild!= NULL)

t=t-gt;

else

t=NULL

return(t); p>

}

int set_key()

{

int clave

static int flag=0

for( ;;)

{

mientras(1)

{

scanf("d", amp;key);

p>

if(key==1||key==2||key==3)

break;

else

p

rintf("Ingrese 1, 2 o 3; vuelva a ingresar: ");

}

if(key==1)

flag=1;

if(flag==1)

break;

else

printf("Error de entrada; vuelva a ingresar: ") ;

}

return(key);

}

Mi escritura es muy buena