请用C语言实现hash链表的构建

时间: 2023-08-15 15:42:47 浏览: 18
以下是一个简单的C语言实现哈希链表的构建的示例代码,仅供参考: ```c #include <stdio.h> #include <stdlib.h> #define HASH_SIZE 10 typedef struct node { int key; int value; struct node* next; } Node; typedef struct hash_table { Node* table[HASH_SIZE]; } HashTable; int hash(int key) { return key % HASH_SIZE; } void put(HashTable* ht, int key, int value) { int index = hash(key); Node* node = ht->table[index]; while (node) { if (node->key == key) { node->value = value; return; } node = node->next; } node = (Node*)malloc(sizeof(Node)); node->key = key; node->value = value; node->next = ht->table[index]; ht->table[index] = node; } int get(HashTable* ht, int key) { int index = hash(key); Node* node = ht->table[index]; while (node) { if (node->key == key) { return node->value; } node = node->next; } return -1; } void print_hash_table(HashTable* ht) { for (int i = 0; i < HASH_SIZE; i++) { printf("index %d: ", i); Node* node = ht->table[i]; while (node) { printf("(%d, %d) ", node->key, node->value); node = node->next; } printf("\n"); } } int main() { HashTable ht; for (int i = 0; i < HASH_SIZE; i++) { ht.table[i] = NULL; } put(&ht, 1, 10); put(&ht, 11, 20); put(&ht, 21, 30); put(&ht, 2, 40); put(&ht, 12, 50); put(&ht, 22, 60); printf("get(1) = %d\n", get(&ht, 1)); printf("get(11) = %d\n", get(&ht, 11)); printf("get(21) = %d\n", get(&ht, 21)); printf("get(2) = %d\n", get(&ht, 2)); printf("get(12) = %d\n", get(&ht, 12)); printf("get(22) = %d\n", get(&ht, 22)); print_hash_table(&ht); return 0; } ``` 在这个示例中,我们定义了一个哈希表结构体`HashTable`和一个链表结构体`Node`。`HashTable`中包含一个长度为`HASH_SIZE`的指向`Node`结构体的指针数组,每个指针指向哈希表中一个链表的头节点。`Node`结构体包含一个键值对和一个指向下一个节点的指针。 我们通过hash函数计算键的哈希值,并将键值对插入到哈希表中。当需要查询一个键值对时,我们通过哈希值找到对应的链表,并在链表中查找对应的节点。 该示例中的哈希表使用的是链表法解决哈希冲突的方式。当哈希值相同的键值对需要插入到同一个链表中时,我们将新的键值对插入到链表头部,这样就可以在O(1)时间内完成插入操作。

相关推荐

哈希过滤器是一种常见的数据结构,它用于判断一个元素是否在一个集合中。它的主要原理是将元素映射到一个哈希表中的一个位置,如果该位置上已经有元素了,就说明该元素可能在集合中,否则该元素一定不在集合中。 具体来说,哈希过滤器包括两个主要部分:哈希函数和位图。 哈希函数将元素映射到哈希表中的一个位置,通常使用的是一些比较简单的函数,例如取模函数、乘法哈希函数、MurmurHash 等。 位图是一个二进制向量,它的每个元素都只能是0或1。哈希函数返回的值被用作位图中的下标,对应的位置上的值被设置为1,表示该元素存在于集合中。当判断一个元素是否在集合中时,只需要将它经过哈希函数得到的位置在位图中查找,如果该位置的值为1,则该元素可能在集合中,否则一定不在集合中。 以下是一个简单的基于 C 语言的哈希过滤器的实现示例: c #include <stdlib.h> #include <stdint.h> #include <stdbool.h> #define FILTER_SIZE 1000 typedef struct { uint8_t *bits; size_t size; } filter_t; filter_t *filter_create(size_t size) { filter_t *filter = (filter_t *)malloc(sizeof(filter_t)); filter->bits = (uint8_t *)calloc(size, sizeof(uint8_t)); filter->size = size; return filter; } void filter_add(filter_t *filter, const void *key, size_t len) { size_t index = *((size_t *)key) % filter->size; filter->bits[index] = 1; } bool filter_contains(filter_t *filter, const void *key, size_t len) { size_t index = *((size_t *)key) % filter->size; return filter->bits[index] == 1; } void filter_destroy(filter_t *filter) { free(filter->bits); free(filter); } 该实现中,filter_t 结构体包含一个 bits 数组和 size 属性,其中 bits 数组用于存储位图,size 属性表示位图的大小。 filter_create 函数用于创建一个新的哈希过滤器,它接受一个参数 size,表示位图的大小。 filter_add 函数用于将一个元素添加到哈希过滤器中,它接受两个参数,key 和 len,分别表示要添加的元素和元素的长度。在该函数中,元素经过哈希函数得到一个下标 index,该下标对应的位置在位图中被设置为1,表示该元素存在于集合中。 filter_contains 函数用于判断一个元素是否在哈希过滤器中,它接
下面是一个基于C语言的简单哈希过滤算法实现: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100000 // 哈希表最大容量 #define PRIME 31 // 哈希函数使用的质数 typedef struct node { char* key; struct node* next; } node; node* hash_table[MAX_SIZE]; // 哈希表数组 // 哈希函数 unsigned long hash(char* str) { unsigned long hash = 0; int i; for (i = 0; str[i] != '\0'; i++) { hash = (hash * PRIME) + str[i]; } return hash % MAX_SIZE; } // 向哈希表中插入一个元素 void insert(char* key) { unsigned long index = hash(key); node* new_node = (node*) malloc(sizeof(node)); new_node->key = strdup(key); new_node->next = NULL; if (hash_table[index] == NULL) { hash_table[index] = new_node; } else { node* curr = hash_table[index]; while (curr->next != NULL) { curr = curr->next; } curr->next = new_node; } } // 在哈希表中查找一个元素,找到返回1,否则返回0 int search(char* key) { unsigned long index = hash(key); node* curr = hash_table[index]; while (curr != NULL) { if (strcmp(curr->key, key) == 0) { return 1; } curr = curr->next; } return 0; } int main() { // 读入一些字符串,插入到哈希表中 insert("hello"); insert("world"); insert("this"); insert("is"); insert("a"); insert("test"); // 查找哈希表中的一些字符串 printf("%d\n", search("hello")); printf("%d\n", search("world")); printf("%d\n", search("this")); printf("%d\n", search("is")); printf("%d\n", search("a")); printf("%d\n", search("test")); printf("%d\n", search("not")); printf("%d\n", search("in")); printf("%d\n", search("the")); printf("%d\n", search("hash")); printf("%d\n", search("table")); return 0; } 该实现使用了一个数组 hash_table 来表示哈希表,数组的每个元素是一个链表,用来解决哈希冲突。在插入元素时,使用 hash 函数计算元素的哈希值,然后将元素插入到对应的链表中。在查找元素时,同样使用 hash 函数计算元素的哈希值,然后遍历对应的链表查找元素。 请注意,该实现并没有处理哈希冲突的情况,即如果两个元素的哈希值相同,它们会被插入到同一个链表中,可能会导致链表过长,影响查
很高兴能为您解答问题。以下是一个简单的C语言实现hashmap的示例代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #define HASHSIZE 101 typedef struct Node Node; struct Node { char *key; char *value; Node *next; }; Node *hashTable[HASHSIZE]; int hash(char *key) { int hashval; for (hashval = 0; *key != '\0'; key++) { hashval = *key + 31 * hashval; } return hashval % HASHSIZE; } Node *lookup(char *key) { int hashval = hash(key); Node *np; for (np = hashTable[hashval]; np != NULL; np = np->next) { if (strcmp(key, np->key) == 0) { return np; } } return NULL; } char *get(char *key) { Node *np = lookup(key); return np == NULL ? NULL : np->value; } void put(char *key, char *value) { Node *np; int hashval; if ((np = lookup(key)) == NULL) { np = (Node *) malloc(sizeof(*np)); if (np == NULL || (np->key = strdup(key)) == NULL) { return; } hashval = hash(key); np->next = hashTable[hashval]; hashTable[hashval] = np; } else { free(np->value); } if ((np->value = strdup(value)) == NULL) { return; } } void del(char *key) { int hashval = hash(key); Node *prev = NULL; Node *np; for (np = hashTable[hashval]; np != NULL; prev = np, np = np->next) { if (strcmp(key, np->key) == 0) { if (prev == NULL) { hashTable[hashval] = np->next; } else { prev->next = np->next; } free(np->key); free(np->value); free(np); return; } } } int main() { put("apple", "red"); put("banana", "yellow"); put("orange", "orange"); printf("%s\n", get("apple")); printf("%s\n", get("banana")); printf("%s\n", get("orange")); del("banana"); printf("%s\n", get("apple")); printf("%s\n", get("banana")); printf("%s\n", get("orange")); return 0; } 这个示例中,我们使用一个固定大小的哈希表数组来保存键值对。在哈希表中,我们使用hash函数将每个键映射为一个在0到100之间的值,以便可以将其保存在相应的哈希表槽中。如果两个不同的键被映射到相同的位置上,它们将被链表链接起来。在查询和删除操作中,我们需要遍历该链表来查找相应的键。
椭圆曲线加密是一种公钥加密算法,它基于椭圆曲线上的离散对数问题。下面是一个简单的用c语言实现椭圆曲线加密的示例代码: c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/ec.h> #include <openssl/ecdsa.h> #include <openssl/obj_mac.h> #include <openssl/rand.h> int main() { EC_KEY *key; EC_GROUP *group; EC_POINT *pub_key; unsigned char *msg = "Hello World"; unsigned char hash[SHA256_DIGEST_LENGTH]; unsigned char sig[128]; unsigned int sig_len; // 初始化EC_KEY对象 key = EC_KEY_new_by_curve_name(NID_secp256k1); if (key == NULL) { printf("Error: failed to create EC_KEY object.\n"); return -1; } // 生成密钥对 if (!EC_KEY_generate_key(key)) { printf("Error: failed to generate EC key pair.\n"); return -1; } // 获取椭圆曲线群 group = EC_KEY_get0_group(key); if (group == NULL) { printf("Error: failed to get EC group.\n"); return -1; } // 生成公钥 pub_key = EC_POINT_new(group); if (pub_key == NULL) { printf("Error: failed to create EC_POINT object.\n"); return -1; } if (!EC_POINT_copy(pub_key, EC_KEY_get0_public_key(key))) { printf("Error: failed to copy public key.\n"); return -1; } // 计算消息的哈希值 SHA256(msg, strlen(msg), hash); // 签名 sig_len = sizeof(sig); if (!ECDSA_sign(0, hash, sizeof(hash), sig, &sig_len, key)) { printf("Error: failed to sign message.\n"); return -1; } // 验证签名 if (!ECDSA_verify(0, hash, sizeof(hash), sig, sig_len, pub_key)) { printf("Error: signature verification failed.\n"); return -1; } printf("Signature verified successfully.\n"); // 释放内存 EC_KEY_free(key); EC_POINT_free(pub_key); return 0; } 上面的示例代码使用了OpenSSL库来实现椭圆曲线加密。它生成一个secp256k1曲线的密钥对,对一个字符串消息进行签名,并验证签名的正确性。
Salsa20是一种流密码,它可以用C语言实现。以下是Salsa20的C语言实现: c #include <stdio.h> #include <stdint.h> #define ROTL32(v, n) (((v) << (n)) | ((v) >> (32 - (n)))) void salsa20_quarter_round(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d) { *b ^= ROTL32((*a + *d), 7); *c ^= ROTL32((*b + *a), 9); *d ^= ROTL32((*c + *b), 13); *a ^= ROTL32((*d + *c), 18); } void salsa20_row_round(uint32_t x[16]) { salsa20_quarter_round(&x[0], &x[4], &x[8], &x[12]); salsa20_quarter_round(&x[5], &x[9], &x[13], &x[1]); salsa20_quarter_round(&x[10], &x[14], &x[2], &x[6]); salsa20_quarter_round(&x[15], &x[3], &x[7], &x[11]); } void salsa20_column_round(uint32_t x[16]) { salsa20_quarter_round(&x[0], &x[1], &x[2], &x[3]); salsa20_quarter_round(&x[5], &x[6], &x[7], &x[4]); salsa20_quarter_round(&x[10], &x[11], &x[8], &x[9]); salsa20_quarter_round(&x[15], &x[12], &x[13], &x[14]); } void salsa20_double_round(uint32_t x[16]) { salsa20_row_round(x); salsa20_column_round(x); } void salsa20_hash(uint32_t out[16], uint32_t in[16]) { uint32_t x[16]; int i; for (i = 0; i < 16; ++i) x[i] = in[i]; for (i = 0; i < 10; ++i) salsa20_double_round(x); for (i = 0; i < 16; ++i) out[i] = x[i] + in[i]; } void salsa20_key_block(uint32_t block[16], uint32_t key[8], uint32_t nonce[2], uint32_t counter) { int i; block[0] = 0x61707865; block[1] = key[0]; block[2] = key[1]; block[3] = key[2]; block[4] = key[3]; block[5] = 0x3320646e; block[6] = nonce[0]; block[7] = nonce[1]; block[8] = counter; block[9] = key[4]; block[10] = key[5]; block[11] = key[6]; block[12] = key[7]; block[13] = 0x79622d32; block[14] = 0x6b206574; block[15] = 0x03000000; salsa20_hash(block, block); } void salsa20_encrypt(uint8_t *out, uint8_t *in, uint32_t inlen, uint32_t key[8], uint32_t nonce[2], uint32_t counter) { uint32_t block[16]; uint8_t keystream[64]; uint32_t i, j; while (inlen > 0) { salsa20_key_block(block, key, nonce, counter); for (i = 0; i < 16; ++i) block[i] = htonl(block[i]); for (i = 0; i < 64; ++i) keystream[i] = ((uint8_t *)block)[i]; for (i = 0; i < 64 && i < inlen; ++i) out[i] = in[i] ^ keystream[i]; inlen -= i; in += i; out += i; ++counter; } } int main() { uint8_t in[1024] = "Hello, Salsa20!"; uint8_t out[1024]; uint32_t key[8] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}; uint32_t nonce[2] = {0x00000000, 0x00000000}; uint32_t counter = 0; salsa20_encrypt(out, in, sizeof(in), key, nonce, counter); printf("Input: %s\n", in); printf("Output: %s\n", out); return 0; } 在此示例中,我们使用Salsa20加密算法对字符串“Hello, Salsa20!”进行加密。我们使用了一个8字节的密钥(所有位为0),一个8字节的nonce(所有位为0),和一个32位的计数器(初始值为0)。输出结果是加密后的字符串。注意,在实际使用中,您应该使用不同的密钥、nonce和计数器来保证安全性。
非加密哈希散列函数可以用多种算法实现,其中比较常用的有MD5、SHA-1、SHA-256等。下面以SHA-256为例,介绍如何用C语言实现非加密哈希散列函数。 首先,我们需要用到一个SHA-256的库,比较常用的有openssl库和libgcrypt库。这里我们以openssl库为例,需要在代码中include openssl/sha.h头文件,并链接libssl库。具体实现如下: c #include <stdio.h> #include <string.h> #include <openssl/sha.h> int main() { char str[] = "hello world"; unsigned char hash[SHA256_DIGEST_LENGTH]; SHA256(str, strlen(str), hash); int i; for(i = 0; i < SHA256_DIGEST_LENGTH; i++) { printf("%02x", hash[i]); } printf("\n"); return 0; } 上面的代码中,我们将字符串"hello world"进行SHA-256哈希,哈希结果存储在hash数组中,然后将hash数组中的每个字节以16进制形式输出。输出结果为: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 这就是字符串"hello world"的SHA-256哈希值。 需要注意的是,SHA-256哈希值的长度为32字节,因此我们定义了一个长度为32的unsigned char数组来存储哈希值。如果使用其他哈希算法,哈希值的长度可能不同,需要相应地调整数组的长度。 另外,由于SHA-256是一种加密哈希算法,其安全性比较高,但运算速度相对较慢。如果只需要实现非加密哈希散列函数,可以考虑使用一些速度更快的算法,如MurmurHash、CityHash等。这些算法的实现比较简单,可以在网上找到相关的代码库。
好的,以下是一个简单的C语言实现的hash表: c #include <stdio.h> #include <stdlib.h> #include <string.h> #define TABLE_SIZE 100 typedef struct { char* key; char* value; } HashNode; typedef struct { HashNode** nodes; } HashTable; unsigned int hash(const char* key) { unsigned int hash = 0; for (int i = 0; i < strlen(key); i++) { hash = hash * 31 + key[i]; } return hash; } HashTable* createHashTable() { HashTable* table = malloc(sizeof(HashTable)); table->nodes = calloc(TABLE_SIZE, sizeof(HashNode*)); return table; } void set(HashTable* table, const char* key, const char* value) { unsigned int index = hash(key) % TABLE_SIZE; HashNode* node = table->nodes[index]; while (node != NULL && strcmp(node->key, key) != 0) { node = node->next; } if (node == NULL) { node = malloc(sizeof(HashNode)); node->key = strdup(key); node->next = table->nodes[index]; table->nodes[index] = node; } node->value = strdup(value); } char* get(HashTable* table, const char* key) { unsigned int index = hash(key) % TABLE_SIZE; HashNode* node = table->nodes[index]; while (node != NULL && strcmp(node->key, key) != 0) { node = node->next; } if (node == NULL) { return NULL; } else { return node->value; } } int main() { HashTable* table = createHashTable(); set(table, "apple", "red"); set(table, "banana", "yellow"); set(table, "grape", "purple"); printf("apple is %s\n", get(table, "apple")); printf("banana is %s\n", get(table, "banana")); printf("grape is %s\n", get(table, "grape")); return 0; } 这个hash表使用了链表来解决hash冲突的问题,每个节点包含一个键和一个值。使用set函数可以向hash表中添加一个键值对,使用get函数可以根据键获取对应的值。
请问您需要的是两个数组的交集元素还是交集元素的数量? 如果是交集元素,可以采用双指针的方式,先将两个数组排序,然后设定两个指针 i 和 j,分别指向两个数组的开头,比较两个指针所指向的元素的大小,如果相等,则说明找到了一个交集元素,将其存到结果数组中;如果不相等,则将指向小的元素的指针向后移动一位,直到其中一个指针越界为止。 代码实现如下: c int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){ int i = 0, j = 0, k = 0; int* res = (int*)malloc(sizeof(int) * (nums1Size > nums2Size ? nums2Size : nums1Size)); // 排序 qsort(nums1, nums1Size, sizeof(int), cmp); qsort(nums2, nums2Size, sizeof(int), cmp); while (i < nums1Size && j < nums2Size) { if (nums1[i] == nums2[j]) { res[k++] = nums1[i]; i++; j++; } else if (nums1[i] < nums2[j]) { i++; } else { j++; } } *returnSize = k; return res; } int cmp(const void* a, const void* b) { return *(int*)a - *(int*)b; } 如果是交集元素的数量,可以采用哈希表的方式,用一个哈希表来记录第一个数组中的元素出现的次数,然后遍历第二个数组,在哈希表中查找是否存在相同的元素,如果存在,则说明找到了一个交集元素,将其计数并从哈希表中删除该元素,最后返回计数结果即可。 代码实现如下: c int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){ int i = 0, j = 0, k = 0; int* res = (int*)malloc(sizeof(int) * (nums1Size > nums2Size ? nums2Size : nums1Size)); int* hash = (int*)malloc(sizeof(int) * 1001); // 由于题目条件限制在 [0, 1000] 范围内,所以哈希表可以开得比较小 memset(hash, 0, sizeof(hash)); for (i = 0; i < nums1Size; i++) { hash[nums1[i]]++; } for (j = 0; j < nums2Size; j++) { if (hash[nums2[j]] > 0) { res[k++] = nums2[j]; hash[nums2[j]]--; } } *returnSize = k; return res; } 希望这些代码能够帮到您,如有疑问请随时问我~
可以使用哈希表来实现化学式元素数量计算。首先,将化学式中的元素和数量分离出来,然后将元素作为键,数量作为值存储在哈希表中。最后,遍历哈希表并计算元素的总数量即可。 以下是示例代码: c #include <stdio.h> #include <string.h> #include <ctype.h> #define MAX_LEN 100 typedef struct { char element[3]; int count; } Element; int hash(char *key) { int sum = 0; while (*key) { sum += *key++; } return sum % 26; } void insert(Element table[], char *element, int count) { int index = hash(element); while (table[index].count != 0) { index = (index + 1) % 26; } strcpy(table[index].element, element); table[index].count = count; } int search(Element table[], char *element) { int index = hash(element); while (table[index].count != 0) { if (strcmp(table[index].element, element) == 0) { return table[index].count; } index = (index + 1) % 26; } return 0; } int main() { char formula[MAX_LEN]; printf("请输入化学式:"); scanf("%s", formula); Element table[26] = {0}; int len = strlen(formula); int i = 0; while (i < len) { char element[3] = {0}; int count = 1; if (isupper(formula[i])) { element[0] = formula[i++]; if (islower(formula[i])) { element[1] = formula[i++]; } if (isdigit(formula[i])) { count = formula[i++] - '0'; while (isdigit(formula[i])) { count = count * 10 + formula[i++] - '0'; } } insert(table, element, count); } else { i++; } } int total = 0; for (i = 0; i < 26; i++) { if (table[i].count != 0) { printf("%s:%d\n", table[i].element, table[i].count); total += table[i].count; } } printf("总数:%d\n", total); return 0; } 输入示例:H2O 输出示例: H:2 O:1 总数:3

最新推荐

常用Hash算法(C语言的简单实现)

下面小编就为大家带来一篇常用Hash算法(C语言的简单实现)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

C语言基于哈希表实现通讯录

主要为大家详细介绍了C语言基于哈希表实现通讯录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

JAVA实现空间索引编码——GeoHash的示例

本篇文章主要介绍了JAVA实现空间索引编码——GeoHash的示例,如何从众多的位置信息中查找到离自己最近的位置,有兴趣的朋友可以了解一下

Python实现通过文件路径获取文件hash值的方法

主要介绍了Python实现通过文件路径获取文件hash值的方法,结合实例形式分析了Python针对文件进行hash运算的实现方法与相关注意事项,需要的朋友可以参考下

oracle分区表之hash分区表的使用及扩展

Hash分区是Oracle实现表分区的三种基本分区方式之一。对于那些无法有效划分分区范围的大表,或者出于某些特殊考虑的设计,需要使用Hash分区,下面介绍使用方法

MATLAB遗传算法工具箱在函数优化中的应用.pptx

MATLAB遗传算法工具箱在函数优化中的应用.pptx

网格QCD优化和分布式内存的多主题表示

网格QCD优化和分布式内存的多主题表示引用此版本:迈克尔·克鲁斯。网格QCD优化和分布式内存的多主题表示。计算机与社会[cs.CY]南巴黎大学-巴黎第十一大学,2014年。英语。NNT:2014PA112198。电话:01078440HAL ID:电话:01078440https://hal.inria.fr/tel-01078440提交日期:2014年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaireU大学巴黎-南部ECOLE DOCTORALE d'INFORMATIQUEDEPARIS- SUDINRIASAACALLE-DE-FRANCE/L ABORATOIrEDERECHERCH EEE NINFORMATIqueD.坐骨神经痛:我的格式是T是博士学位2014年9月26日由迈克尔·克鲁斯网格QCD优化和分布式内存的论文主任:克里斯汀·艾森贝斯研究主任(INRIA,LRI,巴黎第十一大学)评审团组成:报告员:M. 菲利普�

gru预测模型python

以下是一个使用GRU模型进行时间序列预测的Python代码示例: ```python import torch import torch.nn as nn import numpy as np import pandas as pd import matplotlib.pyplot as plt # 加载数据 data = pd.read_csv('data.csv', header=None) data = data.values.astype('float32') # 划分训练集和测试集 train_size = int(len(data) * 0.7) train_data = d

vmware12安装配置虚拟机

如何配置vmware12的“首选项”,"虚拟网络编辑器","端口映射”,"让虚拟机连接到外网”

松散事务级模型的并行标准兼容SystemC仿真

松散事务级模型的并行标准兼容SystemC仿真