📄 search_chain_hash.c
字号:
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 100
#define KEYTYPE int
typedef struct node
{
KEYTYPE key;
struct node *next;
}CHAINHASH;
void create_chain_hash(CHAINHASH *HTC[])
{
//建立哈希表
CHAINHASH *p;
int i,j;
i=0;
scanf("%d",&i);//输入哈希表元素关键字值
while(i!=-99)
{
j=i%13;
p=(CHAINHASH *)malloc(sizeof(CHAINHASH));//生成结点,挂入哈希表中
p->next=HTC[j];
p->key=i;
HTC[j]=p;
scanf("%d",&i);//输入哈希表元素关键字值
}
}
void print_chain_hash(CHAINHASH *HTC[])
{
//显示哈希表
CHAINHASH *p;
int i;
for(i=0;i<13;i++)
{
if(HTC[i]==NULL)printf("%3d|^\n",i);
else
{
p=HTC[i];
printf("%3d|->",i);
while(p!=NULL)
{
printf("%5d->",p->key);
p=p->next;
}
printf("^\n");
}
}
}
int search_chain_hash(CHAINHASH *HTC[],int k)
{
//在哈希表中查找元素
CHAINHASH *p;
int j;
j=k%13;//哈希函数:ADD(rec(key))=key MOD 13
p=HTC[j];
if(p!=NULL)//在哈希表中查找元素
{
while((p->key!=k)&&(p->next!=NULL)) p=p->next;
if(k==p->key) return 1;//查找成功,返回1
else return 0;//查找不成功,返回0
}
else return 0;
}
main()
{
CHAINHASH *HTC[MAXSIZE];
int i,k;
printf("\n建立哈希表\n\n");
for(i=0;i<MAXSIZE;i++)
HTC[i]=NULL;
printf("请输入哈希表元素关键字值,关键字为正整型量,用空格分开,-99为结束标志:\n");
create_chain_hash(HTC);
printf("显示建立的哈希列表:\n\n");
print_chain_hash(HTC);
printf("\n输入待查元素关键字:");
scanf("%d",&i);
k=search_chain_hash(HTC,i);
if(k==0)printf("哈希列表中待查元素不存在\n\n");
else printf("哈希列表中待查元素存在\n\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -