C中链表的总大小
好吧……我对CS数据结构的介绍是如此生疏,我需要在这里提出这个问题.
我有一个链表,其结构是: struct Data_Struct { char *Name; char *Task; char *Pos; struct Data_Struct *Next; }; typedef struct Data_Struct MyData; 现在,在我的应用程序的某个时刻,我用数据填充了列表. 问题是,如何获得存储在那里的数据的总大小?有多少个字符?就像是 sizeof(MyData); 这将返回列表中存储的信息的大小. 代码表示赞赏. 谢谢! 编辑: 和NO,我不需要链接的大小(节点数),我只想知道那里存储了多少个字符. 谢谢 解决方法
您通常会遍历列表,直到您到达尾部项目,同时计数,代码应该是这样的:
int listLength(struct Data_Struct* item) { struct Data_Struct* cur = item; int size = 0; while (cur != null) { ++size; cur = cur->Next; } return size; } 请注意,此操作的复杂性与列表的大小成线性关系,因此它是O(n)并且效率非常低.您可以在某处存储大小并使用列表插入和删除进行更新,以避免任何开销并能够在恒定时间O(1)内计算它. 编辑: size += strlen(Name)+strlen(Task)+strlen(Pos); 请注意,由于list元素中的数据(如果是char *类型)Data_Struct的有效大小只有4个指针,这就是为什么你需要使用像strlen这样的支持函数,否则你无法获得字符串的真实维度. 有什么区别? sizeof(Data_Struct) == 16 因为Data_Struct类型包含4个指针,3个用于指向char的指针,1个指针用于列表中的下一个元素 sizeof(Name) == sizeof(Task) == sizeof(Pos) == 4 因为这些变量是指向char的类型指针,所以它们是指针,没有具体的值,它通常是4个字节(我假设是32位架构) strlen(Name) == length in chars of the string 因为该函数完全用于计算字符串的长度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |