《数据结构学习与实验指导》5-1:整数关键字的散列映射
2017-07-23 11:21
302 查看
实验内容:给定一系列整型关键字和素数PP,用除留余数法定义的散列函数将关键字映射到长度为PP的散列表中。用线性探测法解决冲突。
输入格式:输入第一行首先给出两个正整数N(N≤1000)和P(≥N的最小素数),分别为待插入的关键字总数以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。
输出格式:在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。
测试用例:
输入格式:输入第一行首先给出两个正整数N(N≤1000)和P(≥N的最小素数),分别为待插入的关键字总数以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。
输出格式:在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。
测试用例:
输入 | 输入出 |
---|---|
4 5 24 15 61 88 | 4 0 1 3 |
4 5 24 39 61 15 | 4 0 1 2 |
5 5 24 39 61 15 39 | 4 0 1 2 0 |
#include <stdio.h> #include <stdlib.h> typedef struct Node { int value; int choosed; } *PNode; typedef struct HashTable { int size; PNode arr; } *PHashTable; int N, P; int first = 1; PHashTable init(); int hash(int key); int insert(PHashTable table, int key); int main() { scanf("%d %d", &N, &P); PHashTable table = init(); int i, key; for (i = 0; i < N; i++) { scanf("%d", &key); int index = insert(table, key); if (first) { printf("%d", index); first = 0; } else { printf(" %d", index); } } return 0; } PHashTable init() { PHashTable table = (PHashTable) malloc(sizeof(struct HashTable)); table->size = P; table->arr = (PNode) malloc(sizeof(struct Node) * P); int i; for (i = 0; i < P; i++) { table->arr[i].choosed = 0; } return table; } int hash(int key) { return key % P; } int insert(PHashTable table, int key) { int index = hash(key); while (table->arr[index].choosed && table->arr[index].value != key) { index++; index = index % table->size; } if (! table->arr[index].choosed) { table->arr[index].value = key; table->arr[index].choosed = 1; } return index; }
相关文章推荐
- 《数据结构学习与实验指导》5-2:字符串关键字的散列映射
- 5-43 字符串关键字的散列映射 (25分)
- 5-42 整型关键字的散列映射
- PTA 字符串关键字的散列映射
- 字符串关键字的散列映射
- PTA 字符串关键字的散列映射(25 分)
- 5-43 字符串关键字的散列映射
- PTA 7-17(查找) 字符串关键字的散列映射(25 分) 25分代码
- PTA-数据结构 5-42 整型关键字的散列映射 (25分)
- PTA 7-17 字符串关键字的散列映射
- 4C的练习5-39 整型关键字的散列映射 <线性探测法>
- 5-42 整型关键字的散列映射 (25分)
- 设计一个算法,判断给定的一棵二叉树是否是二叉排序树(二叉树的所有关键字均为正整数)
- 输入一个大于1的正整数N,求1+2+。。。+N 要求是不能使用乘除法,for,while,if,else,switch,case等关键字以及A?B:C
- 插入的分区关键字未映射到任何分区
- 谁养鱼(二):如何将排列映射到整数域
- oracle ORA-01747(系统保留关键字)user.table.column, table.column 或列说明无效 hibernate映射oracle保留关键字
- 利用艺术家的整数ID映射将标签转换为向量
- 运用函数指针和STL的Map实现关键字key与成员函数的映射
- HIBERNATE映射数据库关键字的小技巧