?? 習(xí)題4-開(kāi)散列表上插入元素.c
字號(hào):
#include "datastru.h"
#include <stdio.h>
#include <malloc.h>
void creat_chain_hash(CHAINHASH *HTC[])
{/*建立開(kāi)散列表*/
CHAINHASH *p;
int i, j;
i = 0; scanf("%d",&i); /*輸入開(kāi)散列表元素關(guān)鍵字值*/
while (i != -99) {
j = i % 13; /*散列函數(shù): ADD(rec(key)) = key MOD 13*/
p = (CHAINHASH *) malloc(sizeof(CHAINHASH)); /*生成結(jié)點(diǎn),掛入開(kāi)散列表中*/
p->next = HTC[j];
p->key = i;
HTC[j] = p;
scanf("%d",&i); } /*輸入開(kāi)散列表元素關(guān)鍵字值*/
}
void print_chain_hash(CHAINHASH *HTC[])
{/*顯示開(kāi)散列表 */
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)
{/*開(kāi)散列表中查找元素*/
CHAINHASH *p;
int j;
j = k % 13; /*散列函數(shù): ADD(rec(key)) = key MOD 13*/
p = HTC[j];
if(p != NULL) /*開(kāi)散列表中查找元素*/
{ 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; /*散列函數(shù): ADD(rec(key)) = key MOD 13*/
p = (CHAINHASH *) malloc(sizeof(CHAINHASH)); /*生成結(jié)點(diǎn),掛入開(kāi)散列表中*/
p->next = HTC[j];
p->key = i;
HTC[j] = p;
}
main()
{ CHAINHASH *HTC[MAXSIZE];
int i, k;
printf("\n 建立開(kāi)散列表\n\n");
for (i = 0; i<MAXSIZE; i++)
HTC[i] = NULL;
printf("請(qǐng)輸入開(kāi)散列表元素關(guān)鍵字值,關(guān)鍵字為正整型量,用空格分開(kāi),-99為結(jié)束標(biāo)志 : ");
creat_chain_hash(HTC);
printf("顯示建立的開(kāi)散列表 : \n\n");
print_chain_hash(HTC);
printf("\n輸入待插入元素關(guān)鍵字 : ");
scanf("%d",&i);
k = search_chain_hash(HTC, i);
if (k == 0) { printf("表中待插入元素不存在,可插入散列表中\(zhòng)n\n");
insert_chain_hash(HTC, i);
printf("顯示插入后的開(kāi)散列表 : \n\n");
print_chain_hash(HTC);}
else printf("表中待插入元素存在,不可插入散列表中\(zhòng)n\n");
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -