Tag: 数据结构

双向链表与C / C ++中的多链表

双链表和多链表有什么区别? 在C / C ++程序的帮助下解释我会更好。

使用C数组的哪种数据组织可以生成最快的代码?为什么?

根据以下数据,组织元素数组的最佳方法是什么,以便最快的随机访问? 每个元素都有一些int数,一个名称为3个字符,末尾带有’\ 0’,浮点值 。 我看到两种可能的方法来组织和访问这样的数组: 第一: typedef struct { int num; char name[4]; float val; } t_Element; t_Element array[900000000]; //random access: num = array[i].num; name = array[i].name; val = array[i].val; //sequential access: some_cycle: num = array[i].num i++; 第二: #define NUMS 0 #define NAMES 1 #define VALS 2 #define SIZE (VALS+1) int array[SIZE][900000000]; //random access: num […]

在三维网格上有效地找到等成本点,并且点数成本最低

我有一个3d网格 ,其中网格上的每个点(x,y,z) 与 成本值相关联 。 任何点(x,y,z)的成本都不是事先知道的 。 要知道成本,我们需要进行一个非常昂贵的复杂查询。 我们对这个目标知道的一件事是, 所有三个维度的成本都是单调不减少的 。 现在给出成本C,我需要在表面上找到成本为C 的点(x,y,z) 。 这必须通过仅花费最低成本来完成。 如何解决我的问题? 当我在网上搜索时,我得到了与轮廓识别相关的技术,但是所有这些技术都假设所有点的成本都是预先知道的,比如Marching cubes方法等。在我的例子中,主要指标是成本计算的点数应该是最小的。 如果有人能够建议一种获得近似位置的方法,至少如果不准确的话会很有帮助。

红黑树~1个孩子删除

红色父节点是否有可能只有一个黑色子节点? 我一直在网上玩Red / Black Tree模拟器,我无法设法解决这个问题。 问这个的原因是我相信我的代码中有一个不必要的IF … if (temp_node->color == BLACK && node->color == RED) { node->color = BLACK; global_violation = false; } 谢谢你的反馈!!

实现不同但相似的结构/function集而无需复制粘贴

我正在为C( 这里 )实现一组常见但又不那么简单(或容易出错)的数据结构,并且只是提出了让我思考的想法。 简而言之,问题是,实现两个使用类似算法但具有不同接口的结构的最佳方法是什么,而无需复制粘贴/重写算法? 最好的,我的意思是大多数可维护和可调试。 我认为很明显为什么你不想要同一算法的两个副本。 动机 假设你有一组结构(称之为map ),带有一组相关的函数( map_*() )。 由于地图需要将任何内容映射到任何东西,我们通常会使用void *key和void *data来实现它。 但是,想一下int到int的映射。 在这种情况下,您需要将所有键和数据存储在另一个数组中,并将其地址提供给map ,这不太方便。 现在假设有一个类似的结构(称之为mapc ,c表示“副本”),在初始化期间需要sizeof(your_key_type)和sizeof(your_data_type)并在insert上给出void *key和void *data ,它将使用memcpy复制地图中的键和数据,而不仅仅是保持指针。 用法示例: int i; mapc m; mapc_init(&m, sizeof(int), sizeof(int)); for (i = 0; i < n; ++i) { int j = rand(); /* whatever */ mapc_insert(&m, &i, &j); } 这是相当不错的,因为我不需要保留另一个i s和j s数组。 我的想法 在上面的示例中, […]

用链表解决约瑟夫斯

我已经尝试了一段时间,但是我无法弄清楚如何使下面的程序将N作为输入并生成一个M,以便最后一个死亡的士兵是第13个(N> 13); int main() { int N, M; struct node { int player_id; struct node *next; }; struct node *p, *q; int i, count; printf(“Enter N (number of players): “); scanf(“%d”, &N); printf(“Enter M (every M-th payer gets eliminated): “); scanf(“%d”, &M); // Create circular linked list containing all the players: p = q = […]

解释这段代码的工作原理; 子进程如何返回值以及在哪里?

我不知道子进程返回的值是怎么回事? 输出为6,7; 问题来源: http : //www.cs.utexas.edu/~mwalfish/classes/s11-cs372h/hw/sol1.html Program 1: main() { val = 5; if(fork()) wait(&val); val++; printf(“%d\n”, val); return val; }

如何在内存中存储分子?

我想将分子存储在记忆中。 这些可以是简单的分子: Methane (CH4) CH bond-length: 108.7 pm HH angle: 109 degrees 但也有更复杂的分子,如扑热息痛(C8H9NO2): 如何将分子存储在内存中,包括所有键长和角度? 将atom-structs存储在数组中的好主意? 或者,还有更好的方法?

C中的大数减法

大约20分钟前,我刚刚在一门介绍性的C课程中完成了考试。 关于考试的第一个问题让我措手不及,并且找到了两个大数字的差异。 目标是按值获取两个结构(N1和N2),并将差异存储在通过引用传递的结构中(N3)。 我们被允许假设N3是以所有’0’开始的。 MAX大小可以是任何值,因此如果数字超过100位,解决方案仍然有效。 这是基本代码(原始可能略有不同,这是来自内存) #include #include /* MAX can be any length, 10, 50, 100, etc */ #define MAX 10 struct bignum { char digit[MAX]; char decimaldigit[MAX/2]; }; typedef struct bignum bigNum; void difference(bigNum, bigNum, bigNum *); /* Original values in N1 and N2 N1.digit = { ‘0’, ‘0’, ‘0’, ‘5’, ‘4’, ‘8’, […]

O(1)随机插入/删除和O(1)随机访问的数据结构是什么?

我不知道用于此问题的数据结构。 我希望结构具有: 恒定时间插入或删除。 通过id进行恒定时间检索。 实际系统是: 我有一堆对象,每个对象都有一个唯一的id。 我的程序需要接收id的请求并返回相关对象。 每当它收到我想要的请求时:搜索结构以查看它是否在那里。 如果是,请退货。 如果不是,请将其从磁盘加载到内存中(将其放入结构中,以便下次请求时不必使用磁盘)然后将其返回。 我正在使用C. 这是一个类似的问题,但我不确定它有多相关。