C中链表的总大小

前端之家收集整理的这篇文章主要介绍了C中链表的总大小前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好吧……我对CS数据结构的介绍是如此生疏,我需要在这里提出这个问题.

我有一个链表,其结构是:

struct Data_Struct {
    char *Name;
    char *Task;
    char *Pos;
    struct Data_Struct *Next;
};
typedef struct Data_Struct MyData;

现在,在我的应用程序的某个时刻,我用数据填充了列表.

问题是,如何获得存储在那里的数据的总大小?有多少个字符?就像是

sizeof(MyData);

这将返回列表中存储的信息的大小.

代码表示赞赏.

谢谢!

编辑:
不幸的是,这不是功课.我在20多年前完成了学业,坦率地说,我从来没有在任何事情上使用链接列表.我只是不记得了.
我正在做的是迭代列表并获取每个元素的strlen()并将其保持在全局大小但我想知道是否有更好的方法.

和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)内计算它.

编辑:
没有注意到你想要将整个数据的大小包含在列表中.在您的情况下,您可以保持用于计算长度的相同方法,但是为每个元素添加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

因为该函数完全用于计算字符串的长度.

猜你在找的C&C++相关文章