PTA 数据结构与算法分析 7-42 整型关键字的散列映射 (25 分)
2019-03-25 23:54
423 查看
7-42 整型关键字的散列映射 (25 分)
给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。
输入格式:
输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。
输出格式:
在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。
输入样例:
4 5
24 15 61 88
输出样例:
4 0 1 3
这道题卡了我一天,心里轻视这道题,觉得思路这么简单,肯定能很快写出来,然而卡在后两个测试点一直过不去,难过了一整天,深受打击
思路:对于每一个要放入表中的数据,先判断在不在表内,若在表内则直接输出在表中的数据,若不在,再用线性探测法分配地址
一开始没想到的地方是没有考虑到重复的数据,导致卡了一整天
错误代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; int number[1010]; int N,P,flag = 0,T,tag[1010]; int Hash(int x) { return x%P; } int Search(int v) { for(int i = v;i < P;i++){ if(number[i] == 0 && !tag[i]) return i; else if(i + 1 == P){ i = -1; } } } int main() { cin >> N >> P; for(int i=0;i < N;i++){ int temp,v; scanf("%d",&temp); v = Hash(temp); //没有判断重复的数据 if(!tag[v]){ number[v] = temp; tag[v] = 1; T = v; } else{ T = Search(v); tag[T] = 1; number[T] = temp; } printf("%s%d",flag++?" ":"",T); } return 0; }
改正后的代码:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int N,P,flag = 0,address[1010],number[1010]; int Hash(int x) { return x%P; } int Search(int v) { for(int i = v;i < P;i++){ if(!address[i]){ return i; } else if(i + 1 == P){ i = -1; } } } int main() { cin >> N >> P; for(int i=0;i < N;i++){ int temp,v; bool f = false; scanf("%d",&temp); v = Hash(temp); for(int j=0;j < P;j++){ if(number[j] == temp){ printf(" %d",j); f = true; break; } } if(f) continue; if(!address[v]){ address[v] = 1; number[v] = temp; printf("%s%d",flag++?" ":"",v); } else{ v = Search(v); address[v] = 1; number[v] = temp; printf("%s%d",flag++?" ":"",v); } } return 0; }
相关文章推荐
- PTA 数据结构与算法分析 7-43 字符串关键字的散列映射 (25 分)
- PTA-数据结构 5-42 整型关键字的散列映射 (25分)
- PTA 7-17(查找) 字符串关键字的散列映射(25 分) 25分代码
- 5-42 整型关键字的散列映射
- PTA 字符串关键字的散列映射(25 分)
- 5-42 整型关键字的散列映射 (25分)
- PTA 7-17 字符串关键字的散列映射
- PTA 字符串关键字的散列映射
- 4C的练习5-39 整型关键字的散列映射 <线性探测法>
- 5-43 字符串关键字的散列映射
- 5-43 字符串关键字的散列映射 (25分)
- 《数据结构学习与实验指导》5-1:整数关键字的散列映射
- 《数据结构学习与实验指导》5-2:字符串关键字的散列映射
- 字符串关键字的散列映射
- 遭遇ora-14400:插入的分区关键字未映射到任何分区。
- PTA_7-1 Pop Sequence(25 分)_给指定的序列压栈,可以随时出栈,问你出栈顺序是否正确
- PTA 7-21(排序) PAT排名汇总(25 分)25分代码
- Oracle 问题-ORA-14400: 插入的分区关键字未映射到任何分区
- PTA 7-13 列车调度(25 分)求最大上升子列长度
- PTA 7-20(排序) 奥运排行榜(25 分) 25分代码 结构体排序