📄 8_3.txt
字号:
#include<stdio.h>
#define p 13 /*哈希表空间大小为p*/
#define n 10
typedef int keytp;
typedef struct node{
keytp key;
struct node *next;
}Hnode,*Lnode;
createht(Lnode *ht,keytp key[])
/*输入的关键字个数为n*/
{
int i,hadr;Hnode *s,*t;
for(i=0;i<n;i++) /*哈希表初始化*/
ht[i]=NULL;
for(i=0;i<n;i++)
{
s=(Hnode *)malloc(sizeof(Hnode));
s->key=key[i];
s->next=NULL;
hadr=key[i]%p;
if(ht[hadr]==NULL) /*没有冲突*/
ht[hadr]=s;
else{ /*有冲突,在表尾插入结点,当然也可在表头插入*/
t=ht[hadr];
while(t->next!=NULL)t=t->next;
t->next=s;
}
}
}
Hnode *searchkey(Lnode *ht,keytp key)
{
int hadr;Hnode *s;
hadr=key%p;
if(ht[hadr]==NULL)return NULL;
else{
s=ht[hadr];
while(s){
if(s->key==key)break;
s=s->next;
}
}
return s;
}
deletekey(Lnode *ht,keytp key)
{
int hadr;Hnode *s,*pre;
hadr=key%p;
if(ht[hadr]==NULL)return 0; /*没有该关键字*/
else{
s=ht[hadr];pre=NULL;
while(s){
if(s->key==key)break;
pre=s;
s=s->next;
}
if(s==NULL)return 0; /*没有该关键字*/
if(pre==NULL) ht[hadr]=s->next;
else pre->next=s->next;
free(s); /*删除关键字成功*/
printf("delete key %d success\n",key);
}
return 1;
}
main()
{
Lnode *ht;keytp key[]={32,75,29,63,48,94,25,46,18,70},key1;
Lnode s;
ht=(Lnode *)malloc(sizeof(Lnode)*p);
createht(ht,key);
printf("请输入要查找的关键字:\n");
scanf("%d",&key1);
if(s=searchkey(ht,key1))printf("该关键字存在,其地址为%d\n",s);
printf("请输入要删除的关键字:\n");
scanf("%d",&key1);
deletekey(ht,key1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -