Tag: 遍历

如何在C中搜索图结构中的特定节点?

并非我有时间适当地讨论这个问题以得出结论并调整我的代码,因为学校项目的第一阶段(三个)是24小时,但至少我需要知道我是否做出了正确的决定。 我正在使用链接列表,这是我的结构: typedef struct sCity { int cityID; char *cityName; struct sCityLink *links; struct sCity *next; } nCity, *City; typedef struct sCityLink { City cityLinkParent; City cityLinkTo; struct sCityLink *next; } nCityLink, *CityLink; 基本上,我有很多城市,这些城市连在一起,就像一个图表。 例如,A,B,C,D和E它们按此顺序插入到结构城市中 。 然后,我将A连接到B,C和D,B连接到C,D,E,C连接到D和E,连接到D连接到E. 现在,假设我需要去城市E.这是链表中的最后一个,并且一直遍历链表需要时间。 也许不是这个有5个城市的例子,但在真正的应用程序中,我应该至少支持10,000个城市。 但最短路径是从A到C(也就是起点)从E到E(或者它可能是ADE或ABE,无所谓)。 我的结构是否允许我找到从A到E的最短路径,而不是逐个遍历整个链表? 如果没有,我做错了什么? 如果是的话,我该怎么做? 我不知道怎样才能找到这样的路径……

没有递归的遍历树和C中的堆栈

如何在没有C(无C ++)递归的情况下有效地遍历树的每个节点? 假设我有该树的以下节点结构: struct Node { struct Node* next; /* sibling node linked list */ struct Node* parent; /* parent of current node */ struct Node* child; /* first child node */ } 这不是功课。 我首先喜欢深度。 我不喜欢需要额外的数据结构(例如堆栈)。 我更喜欢速度方面最有效的方式(而不是空间)。 您可以更改或添加Node结构的成员来存储其他信息。

使用fscanf逐行遍历FILE

好的,我有一个文本文件database.txt。 每行都是具有以下格式的用户 “John Smith”| 4| 80.00| “123 Lollipop Lane”| “New Jersey”| “08080” 当我尝试执行以下操作时: database = fopen(fileName,”r”); while(fscanf(database,”%[^\n]”, buffer) != EOF){ printf(“ATTEMPT TO: Insert user %s\n\n”, buffer); if (insert_Customer(clients, create_Customer(buffer)) < 0){ printf("\nERROR: Failed to insert and create customer %s\n", buffer); } else printf("\nSUCCESS: Inserted Customer %s\n\n", buffer); } 它在第一行运行正常,将ENTIRE行发送到create_Customer(char * buffer)函数。 出于某种原因,我不明白,在第一行后,它不断尝试发送“John Smith”,而不是继续前进到下一行。 我相信我的格式不正确,但我无法弄清楚如何完成我想要完成的工作,这是逐行读取此文件并将每行传递到create_Customer函数。

使用opendir(),readdir()和closedir()高效遍历目录树

C例程opendir(),readdir()和closedir()为我提供了遍历目录结构的方法。 但是,readdir()返回的每个dirent结构似乎都没有为我提供一个有用的方法来获取我需要递归到目录子目录的DIR指针集。 当然,他们给我文件的名称,所以我可以将该名称附加到目录路径和stat()和opendir()它们,或者我可以通过chdir()和roll更改进程的当前工作目录它通过chdir(“..”)回来。 第一种方法的问题是,如果目录路径的长度足够大,那么将包含它的字符串传递给opendir()的成本将超过打开目录的成本。 如果你有点理论上的话,可以说你的复杂性可能超过线性时间(在目录树中(相对)文件名的总字符数)。 而且,第二种方法存在问题。 由于每个进程都有一个当前工作目录,因此除了一个线程之外的所有进程都必须在multithreading应用程序中进行阻塞。 另外,我不知道当前工作目录是否仅仅是方便(即,在文件系统查询之前将相对路径附加到它)。 如果是这样,这种方法也会效率低下。 我接受这些function的替代品。 那么如何有效地遍历UNIX目录树(在其下的文件的总字符数中的线性时间)?