求解,数据结构与算法

如题所述

关键字序列是{19,13,33,02,16,24,7},计算过程如下:

插入关键字19, ç´¢å¼•(哈希值) = 19 mod 11 = 8, å­˜å…¥å“ˆå¸Œè¡¨:

  ä¸‹æ ‡    0   1   2   3   4   5   6   7   8   9   10
  å…³é”®å­—                                 19

插入关键字13, ç´¢å¼•(哈希值) = 13 mod 11 = 2, å­˜å…¥å“ˆå¸Œè¡¨:
 
  ä¸‹æ ‡    0   1   2   3   4   5   6   7   8   9   10
  å…³é”®å­—         13                      19

插入关键字33, ç´¢å¼•(哈希值) = 33 mod 11 = 0, å­˜å…¥å“ˆå¸Œè¡¨:

  ä¸‹æ ‡    0   1   2   3   4   5   6   7   8   9   10
  å…³é”®å­— 33      13                      19

插入关键字02, ç´¢å¼•(哈希值) = 02 mod 11 = 2, æœ‰å†²çª,取新索引2+1=3,没有冲突,存入哈希表:

  ä¸‹æ ‡    0   1   2   3   4   5   6   7   8   9   10
  å…³é”®å­— 33      13   2                  19

插入关键字16, ç´¢å¼•(哈希值) = 16 mod 11 = 5, å­˜å…¥å“ˆå¸Œè¡¨:

  ä¸‹æ ‡    0   1   2   3   4   5   6   7   8   9   10
  å…³é”®å­— 33      13   2      16          19

插入关键字24, ç´¢å¼•(哈希值) = 24 mod 11 = 2, æœ‰å†²çª,取索引2+1=3,仍有冲突,
再取索引3+1=4,没有冲突,存入哈希表:

  ä¸‹æ ‡    0   1   2   3   4   5   6   7   8   9   10
  å…³é”®å­— 33      13   2  24  16          19

插入关键字7, ç´¢å¼•(哈希值) = 7 mod 11 = 7, å­˜å…¥å“ˆå¸Œè¡¨:

  ä¸‹æ ‡    0   1   2   3   4   5   6   7   8   9   10
  å…³é”®å­— 33      13   2  24  16       7  19

这就是最后得到的哈希表.


//C语言测试程序
#include<stdio.h>
#include<stdlib.h>

#define SUCCESS 1
#define UNSUCCESS 0
#define HASHSIZE 11
#define NULLKEY -1
typedef int Status;

typedef struct
{
    int *elem;
    int count;
}HashTable;

int m=0;

Status InitHashTable(HashTable *H)
{
    int i;
    m=HASHSIZE;
    H->count=m;
    H->elem=(int *)malloc(m*sizeof(int));
    for(i=0;i<m;i++)
    {
        H->elem[i]=NULLKEY;
    }
    return SUCCESS;
}

int Hash(int key)
{
    return key % m;
}

void InsertHash(HashTable *H,int key)
{
    int addr;
    int pos;
    pos=Hash(key);
    addr=pos;
    while(H->elem[addr] != NULLKEY)
    {
        ////////
        printf("索引=%d æœ‰å†²çª.\n",addr);
        ////////
        addr = (addr+1) % m;
        if(addr==pos)
        {
            printf("\n散列表已满!\n");
            exit(1);
        }
    }
    H->elem[addr]=key;
}

Status SearchHash(HashTable H,int key,int *addr)
{
    *addr = Hash(key);
    while(H.elem[*addr] != key)
    {
        *addr = (*addr+1) % m;
        if(H.elem[*addr]==NULLKEY || *addr==Hash(key))
        {
            return UNSUCCESS;
        }
    }
    return SUCCESS;
}

void showHashTable(HashTable *H)
{
    int i;
    for(i=0 ; i < H->count ;i++)
    {
        printf("%4d",i);
    }
    printf("\n");
    for(i=0 ; i < H->count ;i++)
    {
        if(H->elem[i]==NULLKEY)
        {
            printf("%4c",0x20);
        }
        else
        {
            printf("%4d",H->elem[i]);
        }
    }
    printf("\n");
}

int main()
{
    int key[]={19,13,33,02,16,24,7}; 

    int len;
    int i;
    HashTable H;

    InitHashTable(&H);

    len=sizeof(key)/sizeof(key[0]);
    for(i=0;i<len;i++)
    {
        printf("插入 %d, ç´¢å¼•(Hash) = %d\n",key[i],Hash(key[i]));
        InsertHash(&H,key[i]);
        showHashTable(&H);
    }

return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答

数据结构和算法不一样吗?
这个肯定是不一样,有区别的。数据是一切能输入计算机中的信息的总和,结构是指数据之间的关系。数据结构就是将数据及其之间的关系有效地存储在计算机中并进行基本操作。算法是对特定问题求解步骤的一种描述,通俗讲就是解决问题的方法和策略。但是他们又是相辅相成的。只有数据结构没有算法,相当于只把数...

算法和数据结构有什么区别??
一、指代不同 1、算法:是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令。2、数据结构:指相互之间存在一种或多种特定关系的数据元素的集合。二、目的不同 1、算法:指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最...

算法和数据结构有什么区别
算法与数据结构是计算机科学中的核心概念。它们各自侧重于不同的方面,共同构成了解决问题的基础。算法是一套明确的步骤,旨在解决问题,包括输入、输出与运算过程,描述了解决问题的逻辑与步骤。数据结构则定义了数据的组织和存储方式,通过特定的数据类型及其相关操作,实现数据的管理与操作,涉及数据元素之间...

数据结构和算法 先学哪个比较好
一般大学可能会同时学,我建议先数据结构再算法,数据结构相比较算法来说其实简单一点,而且算法是需要一定数据结构支持的

算法和数据结构的关系
1、数据结构是数据间的有机关系,算法是对数据的操作步骤。没有数据间的有机关系,程序根本无法设计。因为有了数据结构,算法才能诞生。反之,算法又是数据结构得以维持的一个条件,没有算法数据根本无法有规律的打交道,数据之间只会是杂乱无章地碰撞,而数据结构则会消灭。算法是绝对运动的,数据结构是...

数据结构与算法是学什么的
这个学科学习的内容有数据结构、算法。1、数据结构:数据结构主要关注数据的存储和组织方式。涉及线性结构如数组和链表,非线性结构如树和图等。通过理解这些结构,能更有效地处理和操作数据。2、算法:算法关注解决特定问题的方法和步骤。涵盖排序、查找、哈希算法等多种类型,旨在提高计算效率。学习算法有助...

算法和数据结构有什么区别?
数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。往往是在发展一种算法的时候,构建了适合于这种算法的数据结构。一种数据结构如果脱离了算法,那还有什么用呢?实际上也不存在一本书单纯的讲数据结构,或者单纯的讲算法。当然两者也是有一定区别的,算法更加的抽象一些,侧重于对问题的...

数据结构和算法是什么意思?
算法就是计算机处理解决问题的计算机能理解的方法,比如算一个阶乘 , 计算机的算法就是写一个循环,从高到底, 一直乘下去,直到 1 为止, 复杂的算法比如一个强连通带权网络,求两点间的最短路径,这个很有用啊...比如采用广度优先算法,或深度优先算法 算法是比较难理解的,算法往往是和数据结构联系在一起...

数据结构和算法哪个难
从某种程度上讲,数据结构和算法都是计算机科学中的基础学科,其难度取决于个体的背景知识、理解能力和努力程度。一些人可能对数据结构更感兴趣,认为理解和组织数据是一个挑战;而对于另一些人来说,设计和分析算法可能更具挑战性。在实际应用中,二者的关系是紧密联系的,无法单独割裂开来讨论。因此,对于...

应该先学算法还是数据结构
算法是解决问题的方法而数据结构能大大的提高算法的质量。所以先学一下数据结构对一些常用的数据结构有了解在一些复杂的算法中就能体现数据结构的好处。算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。数据结构是计算机存储、组织数据的方式。

相似回答
大家正在搜