C Doubly linked list with structure
我正在做一个双向链表。据我所知,它正在工作,但来到这里是为了确保并查看我是否以正确的方式进行操作。
另一方面,当我做这个时,我遇到了其他与双向链表无关的问题,但与 C 文件之间的结构和”可见性”有关。如果您了解我应该对这两个其他疑问提出其他问题,请告诉。否则请随时启发我。
在我的 file1.c 我有这个:
代码
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#include <stdio.h> #include <stdlib.h> typedef struct team{ typedef struct nodeTeam{ int createsListOfTeams(NodeTeam **head, NodeTeam **tail); int main() eq.name ="A team"; eq.name ="C team"; eq.name ="B team"; /*Will print all the teams*/ return 0; |
在我的 file2.c 上有这个
代码
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct team{ typedef struct nodeTeam{ /*Add the teams to the doubly linked list. At the end, all teams will be sorted by name*/ if ((*head) == NULL){ *tail = *head; /*Creates the doubly linked list*/ no = (NodeTeam*) malloc(sizeof(NodeTeam)); /*copy of my list*/ no->team = team; } } } /*Updates the number of element of the list*/ return 0; |
这是我的树问题:
Q1 – 这是实现双向链表的正确方法吗?头和尾分别指向列表的开头和结尾?
Q2 – 为什么要在我的两个文件上声明
Q3 – 在
在您之前的评论和更仔细地分析了您的代码之后,我做了一些修改。
我错误地解释了关于头部和尾部项目的一个评论,虽然你正在设计一个循环列表
我花时间复制/粘贴/编译您的代码。虽然它几乎可以工作,但我必须说我会用
以另一种方式设计
-
将
prev /next 指针移动到struct team -
并将
nodeTeam 的team 成员替换为指向第一个team 的head 指针。
这将有以下好处:
-
防止为每个
nodeTeams 重复但仅对第一个有意义的numberOfTeams 浪费无用的空间 -
避免概念上的
head 和实际的第一团队之间的混淆
通过将团队列表中的指针值与
相加
“,listofTeams->team.name, listofTeams->team.teamPlace, listofTeams, listofTeams->prev, listofTeams->next);
我注意到您的链接中可能存在错误:
| A team | A team place | 0x101d00980 – p=0x101d00920 n=0x101d009e0
| B team | B team place | 0x101d009e0 – p=0x101d00980 n=0x101d009b0
| C team | C team place | 0x101d009b0 – p=0x101d00980 n=0x101d00950
| D team | D team place | 0x101d00950 – p=0x101d009b0 n=0x0
你可以看到next指针没问题,但是prev指针显示可疑重复(0x101d00920确实是’head’)。
如果您跟踪代码的执行并检查它在
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/269301.html