Tag: 双链表

c circular double linked-list:遍历末尾节点的fwd / rev给出不同的指针地址

相关post: c circular double linked-list delete_node – iterate在删除后首次遍历已删除的节点 所有,在删除该节点之前实现搜索节点连接行号“x”,我遇到了一个问题,正向和反向搜索都识别出正确的节点,但是反向搜索报告了调用者节点地址的指针而不是前锋? 这仅适用于最后一个节点(最高行号)。 如果仅使用转发搜索(pba_fwd_iter_test),则会正确删除最后一个节点。 但是,如果使用反向搜索(pba_rev_iter_test),那么地址设置为“(victim-> next) – > prev = victim-> prev;” 不正确,它设置“(victim-> next) – > prev =(victim-> next) – > prev”。 例如,使用反向搜索到达终端节点然后执行delete_node会导致以下结果: 49: 7 – (line to delete) This is a line of text that is somewhere around 50 to 80 characters in length 48 – prev: […]

获得一个双字母列表的信件

我正在尝试编写一个程序,在双向链表的每个节点中逐字逐字,然后用我写的函数来检查单词是否是回文。 当我编译我的代码时,我在代码中遇到输入问题,所以我想知道如何做到这一点。 int main(){ char c; Llista * list; Dada head = {0, NULL, NULL}; printf(“insertar palabra para comprobar si es palindromo”); while((c=getchar()) != ‘\n’){ InsertAtTail(c); } palindromo(list); return 0; } 这是我写的所有代码: #include #include typedef struct dada{ char c; struct dada *seguent; struct dada *anterior; }Dada; typedef struct lista{ Dada *principi; Dada *fin; unsigned nelements; […]

c circular double linked-list:rev traverse为同一节点提供不同的列表指针地址

相关post1: c循环双链表list_node – 删除后第一遍遍历删除节点 相关post2: c循环双链表:遍历结尾节点的fwd / rev给出不同的指针地址 在使用循环双链表时,我在stackoverflow的帮助下创建了一个delete_node函数,该函数使用列表上的正向或反向迭代来到达要删除的节点。 该函数将链接列表的地址作为参数来实现删除(而不是对列表的指针引用)。 正向和反向迭代的混合仅仅是为了有效地防止遍历整个列表以在向前方向迭代时或在反向迭代时开始到达接近结束的节点。 full source: http://www.3111skyline.com/dl/dev/prg/src/testlld.c.txt compile with: gcc -Wall -o tlld testlld.com void delete_node (rec **list, int node) { // test that list exists if (!*list) { fprintf (stdout,”%s(), The list is empty\n”,__func__); return; } // get size of list int szlist = getszlist (*list); // […]

从C上的文本文件创建双向链表

我必须从文本文件中创建一个双向链表,其中每一行都有时间和温度。 例如,每一行都是这样的:12:48 23.69 因此,我无法将数据放入双向链表中。 我不知道如何实现它。 所以我做了一个元素的typedef结构数组,并希望我可以从数组的第一个元素开始,然后指向数组的第二个元素的下一个元素。 这就是我的…… 所以这是双链表的头文件: #include typedef struct tempdata_{ int *hour; int *min; int *temp; struct tempdata_ *next; struct tempdata_ *prev; }tempdata; teypdef struct templist_{ tempdata *head; tempdata *tail; int size; }templist; ` 这是我的主要文件: #include #include “linkedlist.h” int main ( int argc, char *argv[] ) { FILE *ifp, *ofp; //char outputFilename[] = […]

c circular double linked-list delete_node – iterate在删除后首次遍历已删除的节点

全部,在GNU c中,我有一个循环的双链表我试图实现一个delete_node函数。 它适用于除节点0之外的所有节点。它确实删除(free())节点0,但第一次在删除节点0后遍历列表时,它仍然存在于第一次传递,导致条件停止迭代到失败。 实施的基础是: struct record { char *line; int lineno; int linetype; struct record *prev; struct record *next; }; typedef struct record rec; void iterfwd (rec *list) { rec *iter = list; // second copy to iterate list if (iter == NULL) { fprintf (stdout,”%s(), The list is empty\n”,__func__); } else { do { […]