案例5-1.3 整型关键字的散列映射 (25分)--散列表(除留余数法+线性探测法)

解题思路:

1、初始化散列表,用于标记散列地址是否已用

2、构造结构体,(关键字去重)记录关键字的值和地址

3、读入数据,判断该关键字是否重复查询

4、用辅助数组记录每个关键字的地址,遍历输出

#include <stdio.h>
#include <string.h>
typedef struct {
    int key;
    int value;
} Hash;
int main() {
    int n,p;
    scanf("%d %d",&n,&p);
    int i,j,k=0;
    int flag[p],index[n];
    Hash H[n];
    memset(flag,0,sizeof(flag));//标记数组,用于标记地址是否已用
    memset(index,0,sizeof(index));//按输入顺序记录每个关键字的地址
    int x;
    for(i=0; i<n; i++) {
        scanf("%d",&x);
        for(j=0; j<k; j++) {
            if(x==H[j].value) {//关键字是否重复查询
                index[i]=H[j].key;
                break;
            }
        }
        if(j==k) {//查找关键字的存入地址
            int key=x%p,cnt=0;
            while(cnt!=p&&flag[key%p]) {
                key++;
                cnt++;
            }
            flag[key%p]=1;
            index[i]=key%p;
            H[k].value=x;
            H[k].key=key%p;
            k++;
        }
    }//遍历输出
    for(i=0; i<n; i++) {
        if(i>0)
            printf(" ");
        printf("%d",index[i]);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/snzhong/p/12427366.html

时间: 2024-10-08 23:00:44

案例5-1.3 整型关键字的散列映射 (25分)--散列表(除留余数法+线性探测法)的相关文章

PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)

PTA数据结构与算法题目集(中文)  7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数(将关键字Key中的最后3个字符映射为整数,每个字符占5位:再用除留余数法将整数映射到长度为P的散列表中.例如将字符串AZDEG插入长度为1009的散列表中,我们首先将26个大写英文字母顺序映射到整数0~25:再通过移位将其映射为3:然后根据表长得到,即是该字符串的散列映射位置. 发生冲突时请

PTA 字符串关键字的散列映射(25 分)

7-17 字符串关键字的散列映射(25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数,每个字符占5位:再用除留余数法将整数映射到长度为P的散列表中.例如将字符串AZDEG插入长度为1009的散列表中,我们首先将26个大写英文字母顺序映射到整数0~25:再通过移位将其映射为3×32?2??+4×32+6=3206:然后根据表长得到,即是该字符串的散列映射位置. 发生冲突时请用平方探测法解决. 输入格式: 输入第

基础实验5-2.1 整型关键字的平方探测法散列 (25分)

#include <stdio.h> #include <math.h> #include <string.h> #include <malloc.h> typedef enum {false,true } bool; bool IsPrime(int n) { if(n==0||n==1) return false; if(n>2) { int i; for(i=2; i<=sqrt(n)+1; i++) { if(n%i==0)return

6、整型与浮点型

1.数值型 整型 tinyint:占据空间1字节,储存范围-128——127,0——255 smallint:2个字节 mediuint:3个字节 Int:4个字节 bigint:8个字节 小数 浮点型:float(M,D) M叫“精度”--->代表总位数,D叫“标度”,代表小数位(小数右边的位数) 定点型:decimal(M,D) 长度不确定,是变长类型,把整数部分和小数部分,分开存储,比float精确. 1.1.学习tinyint的参数: (M) unsigned zerofill unsi

JAVA的整型与字符串相互转换

JAVA的整型与字符串相互转换 1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异. 2 如何将整数 int 转换成字串 String ? A

(转)JAVA的整型与字符串相互转换

JAVA的整型与字符串相互转换1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或         i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异. 2 如何将整数 int 转换成字串 Str

[C]基本数据类型:整型(int)用法详解

1.整型int C语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int是整型之一,一般被称为整型.以后,在不产生歧义的情况下,我们把整数类型和int都称为整型. int代表有符号整数,也就是说,用int声明的变量可以是正数,可以是负数,也可以是零,但是只能是整数.标准规定int的最小取值范围是-32767到32767.int的取值范围因机器而异,但是一定要大于或者等于-32767到32767.一般来说,int占用一个字的内存空间.因此,字长为16位(B

【java】线程安全的整型类AtomicInteger

一.遇见AtomicInteger 在看项目代码的时候看到这个类,发现其功能很简单,就是一个整型变量的类型,出于好奇看了其类定义. 该类位于java.util.concurrent.atomic下,在concurrent下可知该类肯定与并发和原子性相关. 二.进一步了解 源码非常简单,结合其他人的博客,基本可以了解到AtomicInteger类是一个提供原子操作的Integer类. 普通的整型类如int和Integer类,在++i/i++等操作并不是线程安全的,在并发环境下容易出现脏数据. At

c语言基础-变量(整型)

一.整型变量 类型 关键字 取值范围 存储单元字节数(非固定) 输出 有符号整型 [signed] int -2147483648~2147483647 4 %d 无符号整型 unsigned [int] 0~4294967295 4 %u 有符号短整型 [signed] short [int] -32768~32767 2 %h 无符号短整型 unsigned short [int] 0~65535 2 %hu 有符号长整型 [signed] long long [int] -21474836