Tag: 数据结构

C问题:为什么char实际占用内存中的4个字节?

我写了一个小程序来检查我的内存中char占用了多少字节,它显示char实际占用内存中的4个字节。 我理解这主要是因为字对齐并且没有看到char只有1个字节的优点。 为什么不使用4个字节的char? int main(void) { int a; char b; int c; a = 0; b = ‘b’; c = 1; printf(“%p\n”,&a); printf(“%p\n”,&b); printf(“%p\n”,&c); return 0; } 输出:0x7fff91a15c58 0x7fff91a15c5f 0x7fff91a15c54 更新:我不相信malloc只会为char分配1个字节,即使sizeof(char)作为参数传递,因为malloc包含一个标题将确保标题是字对齐的。 任何意见? Update2:如果要求你有效地使用没有填充的内存,唯一的方法是创建一个特殊的内存分配器? 或者是否可以禁用填充?

C定向图实现选择

欢迎mon amie , 在我的一些作业中,我觉得需要使用Graph ADT。 但是,我想拥有它,怎么说, generics 。 也就是说,无论我喜欢什么,我都希望存储在其中。 我面临的问题与复杂性有关。 我应该使用什么数据结构来表示节点集? 我忘了说我已经决定使用Adjacency list技术 。 一般来说,教科书提到了一个链表,但据我所知,只要链表很有用并且我们需要进行搜索, 树就更好了 。 但话说回来,我们需要的是将一个节点与其相邻节点列表相关联, 那么哈希表怎么样呢? 你能帮我决定在哪些数据结构(链表,树,哈希表)中存储节点?

__CC_ARM,__ ICC __,__ GNUC__和__TASKING__宏是什么意思?

我正在通过stm研究STM32l151rct6a,我偶然发现了这些MACRO定义 __CC_ARM, __ICCARM__, __GNUC__, __TASKING__ 有谁知道他们的意思?

C数据结构库

我想在C中使用堆栈,有人推荐一个库吗? 例如,对于哈希表,我使用了UThash。 谢谢!

通过readinto()将二进制数据解析为ctypes结构对象

我正在尝试处理二进制格式,遵循以下示例: http://dabeaz.blogspot.jp/2009/08/python-binary-io-handling.html >>> from ctypes import * >>> class Point(Structure): >>> _fields_ = [ (‘x’,c_double), (‘y’,c_double), (‘z’,c_double) ] >>> >>> g = open(“foo”,”rb”) # point structure data >>> q = Point() >>> g.readinto(q) 24 >>> qx 2.0 我已经定义了我的标题的结构,我正在尝试将数据读入我的结构,但我遇到了一些困难。 我的结构是这样的: class BinaryHeader(BigEndianStructure): _fields_ = [ (“sequence_number_4bytes”, c_uint), (“ascii_text_32bytes”, c_char), (“timestamp_4bytes”, c_uint), (“more_funky_numbers_7bytes”, c_uint, 56), (“some_flags_1byte”, c_byte), […]

在位域结构上转换Endianess

我需要将位域结构从little-endian转换为big-endia架构。 这样做的最佳方法是什么,因为如果我只是交换结构元素,那么字节边界就会出现问题。 Ex结构是: struct { unsigned int b1:1; unsigned int b2:8; unsigned int b3:7; unsigned int b4:8; unsigned int b5:7; unsigned int b6:1; };

在文件系统中存储大量文件

我有数百万个音频文件 ,基于GUId( http://en.wikipedia.org/wiki/Globally_Unique_Identifier )生成。 如何将这些文件存储在文件系统中,以便我可以在同一文件系统中有效地添加更多文件 ,并可以有效地 搜索特定文件。 它也应该在未来可扩展。 文件基于GUId(唯一文件名)命名。 例如: [1] 63f4c070-0ab2-102d-adcb-0015f22e2e5c [2] ba7cd610-f268-102c-b5ac-0013d4a7a2d6 [3] d03cf036-0ab2-102d-adcb-0015f22e2e5c [4] d3655a36-0ab3-102d-adcb-0015f22e2e5c PL。 发表你的看法。 PS:我已经完成了。 我需要特定的数据结构/算法/逻辑,以便将来也可以扩展 。 EDIT1:文件数量约为1-2百万,文件系统为ext3(CentOS)。 谢谢, 纳文

没有递归的遍历树和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结构的成员来存储其他信息。

匹配集的数据结构

我有一个应用程序,我有许多集。 一套可能是 {4,7,12,18} 唯一的数字,都小于50。 然后我有几个数据项: 1 {1,2,4,7,8,12,18,23,29} 2 {3,4,6,7,15,23,34,38} 3 {4,7,12,18} 4 {1,4,7,12,13,14,15,16,17,18} 5 {2,4,6,7,13,15} 数据项1,3和4与集合匹配,因为它们包含集合中的所有项目。 我需要设计一个超快速的数据结构来识别数据项是否是集合的成员包括属于集合的所有成员(因此数据项是集合的超集)。 我目前最好的估计表明将会少于50,000套。 我当前的实现将我的集合和数据作为无符号64位整数和存储在列表中的集合。 然后检查一个数据项我遍历列表进行((set&data)== set)比较。 它有效并且它的空间效率很高但它很慢(O(n))并且我很乐意为一些性能交换一些内存。 有没有人对如何组织这个有更好的想法? 编辑:非常感谢所有的答案。 看起来我需要提供有关该问题的更多信息。 我首先得到集合,然后逐个获取数据项。 我需要检查数据项是否与其中一个集匹配。 这些集很可能是“块状的”,例如对于给定的问题,1,3和9可能包含在95%的集合中; 我可以在一定程度上提前预测(但不是很好)。 对于那些建议记忆的人:这就是memoized函数的数据结构。 这些集代表已经计算的一般解决方案,数据项是函数的新输入。 通过将数据项与一般解决方案相匹配,我可以避免大量处理。

编写代码将给定数字转换为单词(例如1234作为输入应输出一千二百三十四)

编写C / C ++ / Java代码将给定的数字转换为单词。 例如: – 输入:1234 输出:一千二百三十四。 输入:10 输出:十 是否需要数字0到10的完整开关盒。 在每个数字名称后面添加“青少年”(例如:14:四个“青少年”。)从14到19。 而不是添加“ty”和20到99范围内的数字的数字名称。 等等。 我认为必须有一些更好的方法来解决这个问题。 C代码是首选。