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