Tag: 数据结构

将数字插入已排序的数组中!

我想编写一段代码,用于在适当的位置将数字插入到排序数组中(即插入后数组仍应保持排序) 我的数据结构不允许重复。 我打算做这样的事情: 找到我应该使用二进制搜索放置此元素的正确索引 通过向下移动该索引中的所有元素,为此元素创建空间。 把这个元素放在那里。 还有其他更好的方法吗?

C:动态大小的结构的推荐样式

我需要通过互联网传输数据包,其长度应该是动态的。 struct packet { int id; int filename_len; char filename[]; }; 问题是零长度数组不符合ISO标准。 我应该使用char filename[1]; 代替? 但是sizeof(struct packet)将不再返回正确的值。

复制链接列表

typedef struct Node { int data; Node *next; Node *other; }; Node *pHead; pHead是一个单独的链表。 next字段指向列表中的下一个元素。 other字段可以指向列表中的任何其他元素(可以是先前节点之一或前面的一个节点)或NULL 。 如何编写复制链接列表及其连接的复制function? 新列表中的所有元素( next和other元素)都不应指向旧列表中的任何元素。

C中的Arraylist无法正常工作

我目前正在编写一个程序来实现C语言中的arraylist(或动态数组)…我认为我已经完成了70-80%,但是,我发现我的代码在测试时遇到了严重的问题。机器 简而言之,我将一组字符串(char *)插入到我的arraylist中,并试图在操作几次后显示它们。 但是,这就是我得到的: CHECK: 1 CHECK: 2 CHECK: ܗ¿èۗ¿ CHECK: EàEàHAÿE؉Ⱥ CHECK: 5 CHECK: 6 不幸的是,即使我已经两次检查了我的代码,我仍然无法弄清楚代码中的问题所在。 arraylist.h #ifndef _ARRAYLIST_H #define _ARRAYLIST_H #include typedef char* value_type; struct arraylist { int size; value_type* data; }; extern void arraylist_initial(struct arraylist *list); extern int arraylist_get_size(const struct arraylist list); extern value_type* arraylist_get_data_collection(const struct arraylist list); extern void arraylist_set_data_collection(struct arraylist […]

二叉树的最低共同祖先(非二叉搜索树)

我尝试使用Tarjan的算法和网站上的一种算法来解决这个问题: http : //discuss.techinterview.org/default.asp?interview.11.532716.6 ,但没有一个是清楚的。 也许我的递归概念没有正确构建。 请举一个小型演示来解释上面两个例子。 我对Union Find数据结构有所了解。 这看起来很有意思。 所以必须解决问题无论如何。 准备面试。 如果存在任何其他逻辑/算法,请分享。

BST节点的所有父母?

在使用递归函数(预订)打印二进制搜索树(BST)时。 我需要打印当前节点的所有父节点(路径根目录)。 可以使用辅助数据结构(例如,我的代码中的路径 ),但我不想保留node-> path来存储路径。 4 / \ / \ 2 6 / \ / \ 1 3 5 7 假设我使用预订序遍历在行中打印节点: NODE PATH 4 4 2 4,2 1 4,2,1 3 4,2,3 6 4,6 5 4,6,5 7 4,6,7 我做了如下: 工作正常! 路径以此代码中的0(零)值结束。 BST中没有节点值为0。 void printpath(int* mypath){ while(*mypath) printf(“%d “, *mypath++); } void preorder(struct tree *p, int* path){ […]

修改深度第一次遍历树

我在接受亚马逊采访时得到了这个问题。 我被要求执行树的深度优先遍历,而不使用递归或堆栈。 我可以为每个节点使用父指针,作为结构的一部分,但除此之外别无其他。(例如,“访问”变量“或任何东西)。请建议我一个算法。

是否有glibc附带的C自动resize/动态数组实现?

在glibc或C的任何标准Linux库中是否有动态数组实现? 我希望能够添加到列表而不必担心它的大小。 我知道std :: vector存在于C ++中,但我需要C等价物。

C结构中的自动字段重新排序以避免填充

我花了几分钟手动重新排序结构中的字段,以减少填充效果[1],这感觉就像几分钟太多。 我的直觉是说我的时间可能更好地花在编写Perl脚本上,或者为我做这种优化。 我的问题是这是否也是多余的; 是否已经有一些我不知道的工具,或者我应该能够启用[2]打包结构的一些编译器function? 由于需要在几种不同的体系结构中一致地优化这一事实,因此问题更加复杂,因此无论使用何种工具都需要能够考虑不同的结构对齐和指针大小。 编辑:快速澄清 – 我想要做的是重新排序源代码中的字段,以避免填充,而不是“填充”结构编译没有填充。 编辑#2:另一个复杂因素:根据配置,某些数据类型的大小也可能会发生变化。 显而易见的是针对不同体系结构的指针和指针差异,但也有浮点类型(16,32或64位,取决于’精确性’),校验和(8位或16位取决于“速度”)和一些其他非显而易见的东西。 [1]所讨论的结构在嵌入式设备上被实例化了数千次,因此结构的每个4字节减少可能意味着该项目的go和no-go之间的差异。 [2]可用的编译器是GCC 3. *和4. *,Visual Studio,TCC,ARM ADS 1.2,RVCT 3. *以及其他一些更加模糊的编译器。

链表中的指针损坏

如果链表中的一个指针是否已损坏,您会如何找到?