【散列表-直接定址法】含有卫星数据的直接定址法

数组T中的每个值都是指针,指针指向node结点,node结点中的元素为key,data。

代码:

#include<stdio.h>

#include<stdlib.h>

typedef struct Node

{

int key;

int data;

}Node;

typedef struct T

{

Node **table;//利用指针数组

int size;

}T;

void T_create(T *t)

{

printf("关键字全域U是多少?\n");

scanf("%d",&t->size);

t->table=(Node **)calloc(sizeof(Node*),t->size);

}

void DIRECT_SEARCH_INSERT(T* t,Node *node)

{

t->table[node->key]=node;

}

void DIRECT_SEARCH_DELETE(T* t,int data)

{

int i;

for(i=1;i<=t->size;i++)

{

if(t->table[i]->data==data)

{

delete t->table[i];

t->table[i]=NULL;

}

}

}

void DIRECT_SEARCH_Search(T *t,int data)

{

int i;

bool IsExist=false;

for( i=1;i<=t->size;i++)

{

if(t->table[i]->data==data)

{

printf("存在%d中",i);

IsExist=true;

}

}

if(IsExist==false)

{

printf("不存在这个数字\n");

}

}

int main(void)

{

int key;

T* t=(T*)malloc(sizeof(T));

T_create(t);

printf("请输入一些数值,以#结束\n");

int ch;

int i=1;

while(scanf("%d",&ch)==1)

{

Node *node=(Node *)malloc(sizeof(node));

node->key=i;

node->data=ch;

DIRECT_SEARCH_INSERT(t,node);

i++;

}

printf("您要查找多少:");

fflush(stdin);

scanf("%d",&key);

DIRECT_SEARCH_Search(t,key);

return 0;

}

结果展示

时间: 2024-10-10 08:48:40

【散列表-直接定址法】含有卫星数据的直接定址法的相关文章

数据结构之散列表总结

散列表的概念 注意:    ①由同一个散列函数.不同的解决冲突方法构造的散列表,其平均查找长度是不相同的.     ②散列表的平均查找长度不是结点个数n的函数,而是装填因子α(填入表中的记录个数/散列表的槽数    n/m).因此在设计散列表时可选择α以控制散列表的平均查找长度.(平均查找长度=总查找(插入)/记录个数)          通过链接法解决冲突:成功查找的期望查找长度O(1+a), 不成功查找的平均查找长度也为O(1+a).         开放寻址解决冲突:引入探查序列,对于a<

【算法导论】学习笔记——第11章 散列表

11.1 直接寻址表当关键字的全域U很小,可采用直接寻址的方式.假设动态集合S的元素都取自全域U={0, 1, ..., m-1}的一个关键字,并且没有两个元素具有相同的关键字.为表示动态集合,使用直接寻址表(diret-address table),记为T[0...m-1],其中的每个位置称为槽(slot).直接寻找表就是按照数组索引,缺点明显.基本操作如下: 1 DIRECT-ADDRESS-SEARCH(T, k) 2 return T[k] 3 4 DIRECT-ADDRESS-INSE

分离链接法实现散列表

散列表是一种用于查找的数据结构.其基本思想来自于索引,也可以看成是数组的一种扩展.对于一些数据信息,比如说图片文件名,如果我们要查找某张图片,通常将图片名作为关键字进行搜索.这个时候是不可能把图片名直接当成数组下标的,因此可以将图片名关键字通过某个函数映射为某个地址,或地址偏移量.那么每次要查找图片的时候直接输入关键字就能直接计算得出存储地址.其定义 T=h(k) 其中k为关键字,h为映射函数,T为得到的散列表,得到的函数值为地址或地址偏移量. 如果不同关键字通过某函数得到的散列值(地址偏移量)

散列表的C语言实现-分离链接法

一:散列表的定义: 散列表的实现常常叫做散列,散列是一种用于以常数平均时间执行插入,查找,删除的技术,但是,那些需要元素间任何排序信息的操作将不会得到支持,如findmin,findmax等等.散列表的优点很明显,它的查询时间为常数,速度非常快,缺点就是元素间没有排序,对于一些需要排序的场合不适用.理想的散列表数据结构就是一个包含有关键字的具有固定大小的数组,用一个散列函数来跟据关键字的值来将关键字插入到表中.这是散列的基本想法,剩下的问题是要选择一个好的散列函数,当俩个关键字散列到同一个值得时

链接法(chaining)构建散列表(hash table)(C++实现)

问题 最近项目中遇到了一个分布式系统的并发控制问题.该问题可以抽象为:某分布式系统由一个数据中心D和若干业务处理中心L1,L2 ... Ln组成:D本质上是一个key-value存储,它对外提供基于HTTP协议的CRUD操作接口.L的业务逻辑可以抽象为下面3个步骤: read: 根据keySet {k1, ... kn}从D获取keyValueSet {k1:v1, ... kn:vn} do: 根据keyValueSet进行业务处理,得到需要更新的数据集keyValueSet' {k1':v1

开放定址散列表

// kaifangliaobiao.cpp : 定义控制台应用程序的入口点. //使用平方探测解决冲突问题时,散列表至少空一半时,总能插入一个新的元素 #include "stdafx.h" #include<iostream> using namespace std; #ifndef HashQuad typedef unsigned int Index; typedef Index Position; struct HashTbl; typedef struct Ha

散列表的数学分析(精解)--通过链表法解决碰撞

散列表的具体实现就不多做介绍了,就是一个数组,每个下标存储的是碰撞的元素的链表头指针,如下图所示: 下面直接研究对用链接法散列的分析: 给定一个能存放n个元素的.具有m个槽位的散列表T,定义T的装载因子α为n/m,即一个链中平均存储的元素数. 用链接法散列的最坏情况性能很差:所有的n个关键字都散列到同一个槽中,从而产生出一个长度为n的链表.这时,最坏情况下查找的时间为O(n),再加上计算散列函数的时间,这么一来就和用一个链表来链接所有的元素差不多了.显然我们并不是因为散列表的最坏情况性能差才用它

[C++]实现散列表的分离链接法的数据结构

散列表,英文叫做Hash Table,因此也叫哈希表,是一种根据关键字值来确定主存中存储位置的数据结构.通过一个散列函数(关于键值的函数),来确定存储该关键字的位置. 主要的方法有: 1.分离链接法(拉链法) 分离链接法的散列函数为 position = key % n. 即关键字的存储位置为关键字的值对表项的数量取模.若表项大小为13,对于关键值为27的项,存储在1(27 % 13 = 1)的表项处.为了减少冲突,n往往取素数.对于同余的关键字,采用 队列(链表) 的方式连接在一起,新放入的元

散列表之链接法

散列表之链接法 散列表的定义 散列表的基本操作 散列表的编码实现 散列表的设计 主测试文件 编译运行 结论 注意: 本文中的所有代码你可以在这里 https://github.com/qeesung/algorithm/tree/master/chapter11/11-2/hashTable(这里会及时更新) 或者这里 http://download.csdn.net/detail/ii1245712564/8804203 找到 散列表之链接法 在之前的文章<散列表之直接寻址表>中介绍了散列表