如何更新散列函数中的表大小

我正在学习如何实现哈希表但我在这里有点困惑因为在下面的书中代码是可用的并且我对代码的理解得很好,但是在书中没有HASH函数的定义,我知道我们必须通过拥有,但根据下面给出的代码给出内部书HASH是两个参数,无论我在HashInsert使用HASH index=HASH(data,t->size)如果我们假设返回类型的HASH , HashInsert它采用两个参数index=HASH(data,t->size)现在为int,例如我们可以将HASH定义为 int HASH(int data,int tsize){ return(data%7); } 但是根据我的程序,如何在HASH函数内更新t->size (表大小)或者我应该如何使用它请帮助我正确实现上面的HASH函数 #define Load_factor 20 #include #include struct Listnode{ int key; int data; struct Listnode* next; }; struct HashTableNode{ int bcount; /// Number of elements in block struct Listnode* next; }; struct HashTable{ int tsize; /// Table size int count; struct HashTableNode** Table; }; struct […]

什么printf打印单位变量?

该代码应该打印什么? 0或任何垃圾值还是依赖于编译器? #include int a; int main() { printf(“%d\n”,a); return 0; }

在C中获取处理时间的问题(请帮帮我)

我是C和WinAPI的新手。 我花了3个多小时尝试这样做,但完全失败了。 谁能帮助我? 这是我的代码: FILETIME *KernelTime; // Or struct _FILETIME *KernelTime HANDLE Process = OpenProcess ( PROCESS_ALL_ACCESS, FALSE, 0); // 0 is the PID of System Idle Process GetProcessTimes (Process, NULL, NULL, KernelTime, NULL); /* How to write here? */ double ElapsedProcessTime // Target !! 我认为这些可能对解决这个问题很有用: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683223%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms724280(v=vs.85).aspx 编译器:GCC-mingw32 谢谢。

寻找一个C / C ++接口,用于在Linux中高效计算庞大的稀疏矩阵

我正在寻找一个C / C ++接口,用于在Linux中高效计算庞大的稀疏矩阵。 矩阵可能是数百万/数千万。 我检查了一些现有的库,但似乎没有一个满足我的所有要求, 1,我需要通过动态添加元素来创建稀疏矩阵。 (不适用于SparseLib ++) 2,我还需要能够创建稀疏对角矩阵,以便我可以使用不同的标量缩放另一个稀疏矩阵的列。 (没有为此找到一个库,也许还有另一种方法可以按列缩放稀疏矩阵) 3,需要支持矩阵运算与矩阵/向量相乘(许多库支持这些基本运算) 4,它需要支持两个稀疏矩阵或向量之间的入口乘法或除法,如MATLAB中的。*或./(没有为此找到一个库,我需要这个操作来筛选一个稀疏的一些条目矩阵与另一个稀疏矩阵) 5,矩阵求逆或线性求解器。 (大多数库提供线性系统的求解器) 我最初在Python中使用scipy来实现我的算法。 Python消耗太多内存而且速度很慢,这就是我想将程序转换为C的原因。 谢谢。

输入scanf数组,递归函数没有循环(.c)

用户得到我的数组大小,我分配了函数“MALLOC”的内存分配,只用递归输入数组,没有循环!! 我不知道如何用递归函数创建一个“循环”。 我希望很高兴能得到帮助。 谢谢。

为什么降低优先级运算符首先执行?

可能重复: 运算符优先级问题 我们知道前缀的优先级大于“LOGICAL AND”( && ),“LOGICAL AND”的优先级大于“LOGICAL OR”( || )。 以下程序似乎违反了它: int main() { int i=-3,j=2,k=0,m; m=++i||++j&&++k; printf(“%d %d %d %d”,i,j,k,m); return 0; } 如果++优先级大于&&和|| 然后所有前缀应首先执行。 在此之后i=-2,j=3,k=1然后&&将首先执行。 为什么输出显示: -2 2 0 1 ? 该程序的行为在ubuntu v12.04上也是相同的。

在C中使用sizeof()运算符时出现奇怪的情况

我正在使用以下代码测试在C / C ++中使用sizeof运算符: #include /* Character types */ #include /* Standard buffered input/output */ #include /* Standard library functions */ #include /* String operations */ #include /* Data types */ #include /* Declarations for waiting */ #include void main() { char a[100]; char *des = malloc(100*sizeof(char)); strcpy(des,”abcded\0″); printf(“%d\n”,sizeof(des)); printf(“%d\n”,sizeof(a)); free(des); } 为什么这个程序输出: 4 100 […]

将三重指针传递给函数然后mallocing一个二维数组

得到分段错误并且不明白为什么,必须传递三重指针才能进行分配,所以无法改变… 这是function void alloc2d(double*** a, int m, int n) { int i, j; **a = malloc(sizeof(double *) * m); a[0] = malloc(sizeof(double) * n * m); for(i = 0; i < m; i++) a[i] = (*a + n * i); } 这是函数的调用…… double** m; alloc2d(&m, 5, 10); double count = 0.0; for (int i = […]

函数返回无穷大的字符串导致嵌入式编译器

我正在尝试执行字符串到双重转换。 在gnu c编译器中我得到了正确的值。 但是如果我在我的嵌入式编译器(renesas CS +)中使用它,它会给出未定义的行为,比如返回无穷大的结果。 这是我的代码: double str_to_double_func(char a[]) { char str[30] = {‘0′}; int loop ; double result; int len ; int pos,n; for(loop = 0;a[loop]!=’\0’;loop++) { str[loop] = a[loop]; } str[loop] = ‘\0’; pos = 0; len = sizeof(str)-1; for (n = 0; n < len; n++) { if (str[n] == '.') […]

读写矩阵

我写了这段代码来输入r * c矩阵 r – >行c – >列 当r c时无法产生正确的输出。 例: r = 6,c = 2 输入:1 2 3 4 5 6 7 8 9 10 11 12 输出: 1 2 11 12 5 6 11 12 11 12 11 12 请告诉我我哪里出错了。 我不想使用恒定大小的数组。 #include void scanmatrix(int* a[],int r,int c) { int i,j; for(i=0;i<r;i++) { for(j=0;j<c;j++) […]