紧急求救!!! C语言 数据遍历问题。

ucc43 2009-10-17 12:28:56
str4
str2 str5
str1 str3 str6

===========================================================

我用str1(只有str1作为输入参数)查找出str2,str3,假设用str2,str3都能找出str4,str5.,str6(其中str4,str5,str6都是main函数),则用str1总共能找到6条路经。
如: str1->str2->str4(main)
str1->str2->str5(main)
...

现在我想用遍历实现,是不是要用二叉树啊,因为一共有多少层是不确定的,每层又有多少字符串也是不确定的,这些字符串都是从数据库中取出来的。

数据库表中就3个子段,1〉父函数 2 〉子函数 3〉Flag标识 (Flag 等于0是表示没到main函数,等于1时表示已经到了main,无需继续查找)


我的程序逻辑是

struct FNC_FULL_PATH_STRUCT
{
char caParentFncNam[80] ;
char caChildFncNam[80] ;
int iFlag ;
};

typedef struct FNC_FULL_PATH_STRUCT FNC_FULL_PATH_STRUCT ;

===========================================================

FetchFucFullPath(char *pStrFucNam,)
{
/* 拷贝输入参数到要最终输出的数组中 */
strcat(caStrFullPath,"=>");
strcat(caStrFullPath,pFncFullPathStruct[i].caParentFncNam);

/* 返回的纪录条数做循环 ,返回的记录条数存储在结构体数组中 */
/*caStrFullPath为全局数组
pFncFullPathStruct为结构体数组
*/

FetchDB(pStrFucNam,pFncFullPathStruct,&iNumOfRecrd);

for(int i=0;i<iNumOfRecrd;i++,pFncFullPathStruct++)
{
if(Flag == 0)
{
FetchFucFullPath(pFncFullPathStruct[i].caParentFncNam);
}
else
{
printf("======== Full function path is [%s] \n",caStrFullPath);
}
}
}

现在只返回了str1->str2->str4(main),不能从str4返回到str2,再进行遍历,我想得到全部的6条遍历,请教!!!
...全文
172 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lllcccppp 2009-10-17
  • 打赏
  • 举报
回复
建议用双向链表,就是说再在节点域中加入一个指向上一个元素的指针,这样,后继元素就可以访问前面的那个节点了。同样的道理,你这里面str4也可以返回到上面来做吧。
arong1234 2009-10-17
  • 打赏
  • 举报
回复
建议你看看二叉树的“深度遍历”和“广度遍历”,或者“左序遍历”,“中序遍历”和“后序遍历”,学习了这些,估计你就没问题了
ucc43 2009-10-17
  • 打赏
  • 举报
回复
str4
str2 str5
str1 str3 str6

说明:
数据库表就3列:
1〉父函数 2 〉子函数 3〉Flag标识

这些代表的是存在数据库中函数名称,所以当子函数往后推,找父函数,找到str4,5,6为main函数时(Flag=1),则停止。
cBirdNO1NO1 2009-10-17
  • 打赏
  • 举报
回复
用单链表即可(如下描述。设链表头指针为ND *h,是全局变量)
void findp(ND *r,char *str)/*主函数调用:findp h,"str1" */
{ if 在数据表中找不到str,则return ;
if str的flag=1,则输出链表h的所有结点;return ;
do
{ if 在数据表中可查找到str的下一个结点strnext 则
{ 将strnext作为结点插入r之后,再r指向链表尾;
findp(r,strnext);
}
else
return;
}while(1)
}
zhongfei5006 2009-10-17
  • 打赏
  • 举报
回复
感觉可以考虑用栈解决下 栈不空则继续调用
zjhiphop2006 2009-10-17
  • 打赏
  • 举报
回复
你可以定义一个复合的结构体:
typedef struct {
int flag;
char *str;
FNC_FULL_PATH_STRUCT *child[];
}FNC_FULL_PATH_STRUCT,*parent;
建立FNC_FULL_PATH_STRUCT类型的链表,初始化链表,当flag=1时,将child初始化为NULL,当flag=0时,初始化child[]数组,数组中存放多个FNC_FULL_PATH_STRUCT类型的指针,对应于你这里的str2,str3,接着再依次初始化str2,str3节点。
遍历的时候,使用while(parent->child!=NULL){for循环遍历child数组,当遇到NULL时则打印出结果}。以上是大概思路,楼主可以尝试一下!
ucc43 2009-10-17
  • 打赏
  • 举报
回复
二叉树好像不好实现,因为同一层可能多个str,双链表可以给出点代码么? 关键是每层的数据我还得调用函数访问数据库才知道,取出来再存到全局数组中,而且必须遍历这一层的每个str,找出完整璐劲,该怎么实现?

我最终是想取道 一个函数,完整的访问路径,如print->CallingFunction->main
而表中,这3个函数名是单独存的。

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧