这段C语言代码如何转换成Python语言?(关于哈希表)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这段C语言代码如何转换成Python语言?(关于哈希表)相关的知识,希望对你有一定的参考价值。

void SearchHash1(HashTable* H,int c) //在通讯录里查找姓名关键字,若查找成功,显示信息

int p,pp;NA str;

system("cls"); //c用来记录冲突次数,查找成功时显示冲突次数

benGetTime();

printf("\n请输入要查找记录的姓名:\n");

scanf("%s",str);

p=Hash1(str);

pp=p;

while((H->elem[pp]!=NULL)&&(eq(str,H->elem[pp]->name)==-1))

pp=collision(p,c);

if(H->elem[pp]!=NULL&&eq(str,H->elem[pp]->name)==1)

printf("\n查找成功!\n查找过程冲突次数为%d.以下是您需要要查找的信息:\n\n",c);

printf("姓名:%s\n学号:%s\n电话号码:%s\n",H->elem[pp]->name,H->elem[pp]->xuehao,H->elem[pp]->tel);


else printf("\n此人不存在,查找不成功!\n");

benGetTime();

将以上 C 语言代码转换为 Python 语言可能需要对哈希表和其他数据结构进行重新实现。但是可以提供一个类似的实现方式
def search_hash(hash_table, name):
collisions = 0 # to keep track of number of collisions
index = hash_function(name)
while hash_table[index] is not None and hash_table[index]['name'] != name:
collisions += 1
index = collision_resolution(index)
if hash_table[index] is not None:
print("Search successful! Number of collisions:", collisions)
print("Name: ", hash_table[index]['name'])
print("ID: ", hash_table[index]['id'])
print("Phone: ", hash_table[index]['phone'])
else:
print("Search unsuccessful.")
这个例子使用了字典来存储联系人的信息,其中 'name','id' 和 'phone' 是字典的键。hash_function() 和 collision_resolution() 函数可以用 Python 中的内置函数来实现,或者自己实现。
注意,这只是一种类似的实现方式,并不能完全替代原来的代码,还需要根据实际需求进行修改。
另外,在 Python 中可以使用字典或字典组成的列表来存储哈希表,可以使用字典中的 get() 方法或者列表中的 in 关键字来查找一个元素是否在字典或列表中,如果要实现类似 C 语言中的冲突解决方式,可以在字典中使用链表或线性探测法来实现。
这里只是给出了一种可能的实现方式,具体实现还需要根据具体需求进行调整。
参考技术A def search_hash1(H, c):
str = input("\n请输入要查找记录的姓名:\n")
p = hash1(str)
pp = p
while H[pp] is not None and eq(str, H[pp]['name']) == -1:
pp = collision(p, c)
if H[pp] is not None and eq(str, H[pp]['name']) == 1:
print("\n查找成功!\n查找过程冲突次数为%d.以下是您需要要查找的信息:\n\n" % c)
print("姓名:%s\n学号:%s\n电话号码:%s\n" % (H[pp]['name'], H[pp]['xuehao'], H[pp]['tel']))
else:
print("\n此人不存在,查找不成功!\n")
需要注意的是,在 Python 中,哈希表是用字典来实现的,因此 H->elem[pp] 应改为 H[pp]。另外,C 语言的 scanf 函数在 Python 中可以使用内置函数 input 来代替。
希望这能帮到您!如果您有任何其他问题,请随时告诉我。
参考技术B 这段 C 语言代码可以转换成如下的 Python 代码:
def search_hash1(h, c):
str = input("\n请输入要查找记录的姓名:\n")
p = hash1(str)
pp = p while h.elem[pp] is not None and eq(str, h.elem[pp].name) == -1:
pp = collision(p, c) if h.elem[pp] is not None and eq(str, h.elem[pp].name) == 1: print("\n查找成功!\n查找过程冲突次数为%d.以下是您需要要查找的信息:\n\n" % c) print("姓名:%s\n学号:%s\n电话号码:%s\n" % (h.elem[pp].name, h.elem[pp].xuehao, h.elem[pp].tel))
else:
print("\n此人不存在,查找不成功!\n")

注意,在 Python 中没有 C 语言中的 scanf() 函数,所以我们可以使用 Python 中的 input() 函数来替代它。
此外,在 Python 中没有 C 语言中的 system() 函数,所以我们可以使用 Python 中的 os 模块中的 system() 函数来替代它,例如:
import osos.system("cls")

当然,如果你想在 Python 中实现清屏的效果,你也可以使用以下代码:
import osos.system("clear")

但是,这段代码只在 Unix/Linux 系统中有效,在 Windows 系统中无效。
希望这些信息对你有帮助。
参考技术C 在 C 语言中使用哈希表需要自己手动实现,而 Python 的标准库中已经包含了哈希表的实现,所以将 C 语言中的哈希表代码转换为 Python 代码会更加简单。下面是一个 C 语言实现的哈希表,以及相应的 Python 代码实现。

C 语言代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TABLE_SIZE 1000

typedef struct
char* key;
char* value;
entry;

typedef struct
entry* entries;
int size;
hashtable;

hashtable* create_hashtable()
hashtable* h = (hashtable*)malloc(sizeof(hashtable));
h->size = TABLE_SIZE;
h->entries = (entry*)calloc(h->size, sizeof(entry));
return h;


void free_hashtable(hashtable* h)
for (int i = 0; i < h->size; i++)
if (h->entries[i].key != NULL)
free(h->entries[i].key);
free(h->entries[i].value);


free(h->entries);
free(h);


int hash(char* key)
int hashval = 0;
for (int i = 0; i < strlen(key); i++)
hashval = (hashval * 31 + key[i]) % TABLE_SIZE;

return hashval;


void insert(hashtable* h, char* key, char* value)
int index = hash(key);
while (h->entries[index].key != NULL)
if (strcmp(h->entries[index].key, key) == 0)
free(h->entries[index].value);
h->entries[index].value = strdup(value);
return;

index = (index + 1) % TABLE_SIZE;

h->entries[index].key = strdup(key);
h->entries[index].value = strdup(value);


char* get(hashtable* h, char* key)
int index = hash(key);
while (h->entries[index].key != NULL)
if (strcmp(h->entries[index].key, key) == 0)
return h->entries[index].value;

index = (index + 1) % TABLE_SIZE;

return NULL;


Python:
TABLE_SIZE = 1000

class hashtable:
def __init__(self):
self.entries = [None] * TABLE_SIZE

def __del__(self):
for i in range(len(self.entries)):
if self.entries[i] is not None:
del self.entries[i].key
del self.entries[i].value

def hash(self, key):
hashval = 0
for c in key:
hashval = (hashval * 31 + ord(c)) % TABLE_SIZE
return hashval

def insert(self, key, value):
index = self.hash(key)
while self.entries[index] is not None:
if self.entries[index].key == key:
self.entries[index].value = value
return
index = (index + 1) % TABLE_SIZE
self.entries[index] = entry(key, value)

def get(self, key):
index = self.hash(key)
while self.entries[index] is not None:
if self.entries[index].
参考技术D def search_hash1(H, c):
str = input("\n请输入要查找记录的姓名:\n")
p = hash1(str)
pp = p
while H[pp] is not None and eq(str, H[pp].name) == -1:
pp = collision(p, c)
if H[pp] is not None and eq(str, H[pp].name) == 1:
print(f"\n查找成功!\n查找过程冲突次数为c.以下是您需要要查找的信息:\n\n姓名:H[pp].name\n学号:H[pp].xuehao\n电话号码:H[pp].tel")
else:
print("\n此人不存在,查找不成功!")

以上是关于这段C语言代码如何转换成Python语言?(关于哈希表)的主要内容,如果未能解决你的问题,请参考以下文章

关于强制类型转换(c语言)

c语言如何把c程序编译成可执行的exe文件

C语言如何将int类型转换成字符串

C语言怎么转化成python

C语言中关于字符串转整型?

c语言里如何将float转换成string