先锋商泰笔试题目,调试通过


#include
#include

#define MEMORY_SIZE 102400

typedef unsigned char BYte;
typedef void* Ptr;

typedef Ptr (*NOdefunc)(void);
typedef void (*DOfunc)(int n, Ptr p);


typedef struct _MEmory* PCmemory;
typedef struct _MEmory
{
BYte amem[MEMORY_SIZE];
int nmem_point;
} CMemory;


typedef struct _STack* PCstack;
typedef struct _STack
{
Ptr pcontent;
PCstack pnext;
} CStack;


typedef struct _Tree* PCtree;
typedef struct _Tree
{
Ptr pcontent;
PCtree pson;
PCtree pbrother;
} CTree;

void Minit(PCmemory pmem);
Ptr Malloc(PCmemory pmem, int size);

PCstack Snew(void);
PCstack Spush(PCstack pstk, Ptr p);
PCstack Spop(PCstack pstk, Ptr* p);


PCtree Tnew(void);
void Taddson(PCtree ptree, NOdefunc f);
/******************************************************************************/
PCstack Snew(void)
{
return NULL;
}


void Taddbrother(PCtree ptree, NOdefunc f);
void Tbrowse(PCtree ptree,DOfunc f, int n);
void Tbrowse_Satck(PCtree ptree, DOfunc f, int n);

Ptr Node(void);
void Out(int n,Ptr p);



static CMemory mem;
PCmemory xpmem = &mem;
static char* aanode[28]=
{
"1", "2", "3", NULL, "4", NULL, "5",
NULL, NULL, "6", NULL, "7", "8", NULL,
"9", "10", NULL, "11", NULL, "12", NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
static int nnode=0;




int main(int argc, char* argv[])
{
Minit(xpmem);
PCtree ptree = Tnew();
Taddson(ptree,Node);
Tbrowse(ptree->pson,Out,0);
Tbrowse_Satck(ptree->pson,Out,0);
return 0;
}

/******************************************************************************/
void Minit(PCmemory pmem)
{
pmem->nmem_point=0;
}


/******************************************************************************/
Ptr Malloc(PCmemory pmem, int size)
{
int n_cur_mem_p;
n_cur_mem_p = pmem->nmem_point;
pmem->nmem_point += size;
return (pmem->nmem_point>n_cur_mem_p)&& (pmem->nmem_pointamem+n_cur_mem_p):NULL;
}


/******************************************************************************/
PCstack Spush(PCstack pstk, Ptr p)
{
PCstack pstknew;
pstknew = (PCstack)Malloc(xpmem,sizeof(CStack));
pstknew->pcontent = p;
pstknew->pnext = pstk;
return pstknew;
}

/******************************************************************************/
PCstack Spop(PCstack pstk, Ptr* pp)
{
if(pstk!=NULL)
{
*pp = pstk->pcontent;
pstk = pstk->pnext;
return pstk;
}
else
return NULL;
}



/******************************************************************************/
PCtree Tnew(void)
{
PCtree proot;
proot = (PCtree)Malloc(xpmem,sizeof(CTree));
proot->pcontent = "ROOT";
proot->pson=NULL;
proot->pbrother=NULL;
return proot;
}

/******************************************************************************/
void Taddson(PCtree ptree, NOdefunc f)
{
Ptr p = f();
if(p==NULL)
{
Taddbrother(ptree,f);
}
else
{
PCtree ptreenew = (

PCtree)Malloc(xpmem,sizeof(CTree));
ptreenew->pson=NULL;
ptreenew->pbrother=NULL;
ptreenew->pcontent = p;
ptree->pson = ptreenew;
Taddson(ptreenew,f);
Taddbrother(ptree,f);
}
}


/******************************************************************************/
void Taddbrother(PCtree ptree, NOdefunc f)
{
Ptr p = f();
if(p==NULL)
return ;
else
{
PCtree ptreenew = (PCtree)Malloc(xpmem,sizeof(CTree));
ptreenew->pson=NULL;
ptreenew->pbrother=NULL;
ptreenew->pcontent = p;
ptree->pbrother = ptreenew;
Taddson(ptreenew,f);
}
}


/******************************************************************************/
void Tbrowse(PCtree ptree,DOfunc f, int n)
{
if(ptree!=NULL)
{
f(n,ptree->pcontent);
Tbrowse(ptree->pson,f,n+1);
Tbrowse(ptree->pbrother,f,n);
}
}

/******************************************************************************/
void Tbrowse_Satck(PCtree ptree, DOfunc f, int n)
{
PCstack pstk;
pstk = Snew();
while(1)
{
f(n,ptree->pcontent);//

if(ptree->pson==NULL)
{
while(ptree->pbrother==NULL)//
{
pstk = Spop(pstk,(Ptr*)&ptree);
n--;
if(pstk==NULL)
return ;
}
ptree = ptree->pbrother;
}
else
{
pstk = Spush(pstk,ptree);
n++;
ptree = ptree->pson;
}
}
}

/******************************************************************************/
Ptr Node(void)
{
return aanode[nnode++];
}
/******************************************************************************/
void Out(int n,Ptr p)
{
int i;
for(i=0; i{
printf("_");
}
printf("%s\n",p);
}

相关文档
最新文档