数据结构— —哈希表顺序实现

简介: 数据结构— —哈希表顺序实现

哈希表的初始化

bool initHash(Hash& hash, int size)
{
  //int n = HashFound(hash, key);
  hash.size = size;
  hash.list = new Sqlist[size];
  for (int i = 0; i < hash.size; i++)
  {
    hash.list[i].data = new Data[30];
    if (hash.list[i].data == NULL)
    {
      return false;
    }
    hash.list[i].length = 0;
  }
  return true;
}

哈希表的插入

bool insert(Hash& hash, int key, int value)
{
  if (found(hash, key))
  {
    return false;
  }
  else
  {
    Data D;
    D.data1 = value;
    D.key = key;
    int n = HashFound(hash, key);
    hash.list[n].data[hash.list[n].length] = D;
    hash.list[n].length++;
    return true;
  }
}

哈希表的查询

bool found(Hash& hash, int key)
{
  int n = HashFound(hash, key);
  for (int i = 0; i < hash.list[n].length; i++)
  {
    if (hash.list[n].data[i].key == key)
    {
      return true;
    }
  }
  return false;
}

哈希表的删除

bool Delete(Hash& hash, int key)
{
  int n = HashFound(hash, key);
  int pos = -1;
  for (int i = 0; i < hash.list[n].length; i++)
  {
    if (hash.list[n].data[i].key == key)
    {
      pos = i;
    }
  }
  if (pos != -1)
  {
    for (int j = pos; j < hash.list[n].length - 1; j++)
    {
      hash.list[n].data[j] = hash.list[n].data[j + 1];
    }
    hash.list[n].length--;
  }
  return true;
}

哈希表的桶查找

int HashFound(Hash& hash, int key)
{
  int n = key % hash.size;
  return n;
}

哈希表的销毁

bool Destory(Hash& hash)
{
  for (int i = 0; i < hash.size; i++)
  {
    delete (hash.list[i].data);
  }
  delete (hash.list);
  return true;
}

哈希表的代码实现

#include <iostream>
#include <Windows.h>
using namespace std;
typedef struct _Data
{
  int data1;
  int key;
}Data;
typedef struct _Sqlist
{
  Data* data;
  int length;
}Sqlist;
typedef struct _Hash
{
  int size;
  Sqlist* list;
}Hash;
bool initHash(Hash& hash, int size);
bool insert(Hash& hash, int key, int value);
int HashFound(Hash& hash, int key);
bool Delete(Hash& hash, int key);
bool Destory(Hash& hash);
bool found(Hash& hash, int key);
void Print(Hash& hash);
bool Destory(Hash& hash)
{
  for (int i = 0; i < hash.size; i++)
  {
    delete (hash.list[i].data);
  }
  delete (hash.list);
  return true;
}
bool Delete(Hash& hash, int key)
{
  int n = HashFound(hash, key);
  int pos = -1;
  for (int i = 0; i < hash.list[n].length; i++)
  {
    if (hash.list[n].data[i].key == key)
    {
      pos = i;
    }
  }
  if (pos != -1)
  {
    for (int j = pos; j < hash.list[n].length - 1; j++)
    {
      hash.list[n].data[j] = hash.list[n].data[j + 1];
    }
    hash.list[n].length--;
  }
  return true;
}
int HashFound(Hash& hash, int key)
{
  int n = key % hash.size;
  return n;
}
bool insert(Hash& hash, int key, int value)
{
  if (found(hash, key))
  {
    return false;
  }
  else
  {
    Data D;
    D.data1 = value;
    D.key = key;
    int n = HashFound(hash, key);
    hash.list[n].data[hash.list[n].length] = D;
    hash.list[n].length++;
    return true;
  } 
}
bool found(Hash& hash, int key)
{
  int n = HashFound(hash, key);
  for (int i = 0; i < hash.list[n].length; i++)
  {
    if (hash.list[n].data[i].key == key)
    {
      return true;
    }
  }
  return false;
}
bool initHash(Hash& hash, int size)
{
  //int n = HashFound(hash, key);
  hash.size = size;
  hash.list = new Sqlist[size];
  for (int i = 0; i < hash.size; i++)
  {
    hash.list[i].data = new Data[30];
    if (hash.list[i].data == NULL)
    {
      return false;
    }
    hash.list[i].length = 0;
  }
  return true;
}
void Print(Hash& hash)
{
  for (int i = 0; i < hash.size; i++)
  {
    for (int j = 0; j < hash.list[i].length; j++)
    {
      cout << "key:" << hash.list[i].data[j].key << " data:" << hash.list[i].data[j].data1 << endl;
    }
  }
}
int main(void)
{
  Hash hash;
  int size = 5;
  initHash(hash, size);
  insert(hash, 1, 11);
  insert(hash, 2, 12);
  insert(hash, 3, 13);
  insert(hash, 4, 14);
  Print(hash);
  Delete(hash, 2);
  Print(hash);
  Destory(hash);
  system("pasue");
  return 0;
}


相关文章
|
6月前
|
算法
数据结构-哈希表(二)
数据结构-哈希表(二)
74 0
|
6月前
|
存储 索引 Python
python中的哈希表数据结构
python中的哈希表数据结构
50 0
|
6月前
|
存储 C++ Python
【数据结构】哈希表—C/C++实现
【数据结构】哈希表—C/C++实现
88 0
|
6月前
|
存储 缓存 算法
数据结构之哈希表
数据结构之哈希表
76 0
|
1月前
|
算法 Java 数据库
数据结构与算法学习十五:哈希表
这篇文章详细介绍了哈希表的概念、应用实例、实现思路,并提供了使用Java实现的哈希表代码。
53 0
数据结构与算法学习十五:哈希表
|
2月前
|
存储 Java Serverless
【数据结构】哈希表&二叉搜索树详解
本文详细介绍了二叉搜索树和哈希表这两种数据结构。二叉搜索树是一种特殊二叉树,具有左子树节点值小于根节点、右子树节点值大于根节点的特点,并且不允许键值重复。文章给出了插入、删除和搜索等方法的具体实现。哈希表则通过哈希函数将键名映射为数组下标,实现快速查找,其插入、删除和查找操作时间复杂度理想情况下为O(1)。文中还讨论了哈希函数的设计原则、哈希冲突的解决方法及哈希表的实现细节。
52 8
【数据结构】哈希表&二叉搜索树详解
|
1月前
|
存储 缓存 Java
【数据结构】哈希表
【数据结构】哈希表
31 1
|
3月前
|
存储 Java
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
这篇文章通过Java代码示例展示了如何实现哈希表,包括定义结点类、链表类、数组存储多条链表,并使用简单的散列函数处理冲突,以及如何利用哈希表存储和查询学生信息。
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
|
5月前
|
存储 NoSQL 算法
redis数据结构—哈希表
redis数据结构—哈希表
54 0
|
5月前
|
存储 算法 大数据
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)