索引结构与散列技术 POWERBY CHenCHengNET

原创 2006年06月12日 17:09:00

// hashtable.h: interface for the hashtable class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HASHTABLE_H__B98B72DB_0601_4B42_B259_59E8CBB1C59C__INCLUDED_)
#define AFX_HASHTABLE_H__B98B72DB_0601_4B42_B259_59E8CBB1C59C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class hashtable 
{
public:
 hashtable                        ();
 hashtable                        (int key);
 virtual ~hashtable               ();
 hashtable* InserttheNode         (hashtable* new_node);
 bool HaveDeletetheNode         (int key);
 hashtable* SearchtheNode         (int key);
 int HashingFunction              (int key);
 bool IsExistedintheHashtable     (int key);
 void DisplaytheHashTable         ();
private:
    int m_key;
 hashtable* m_next;
 hashtable* m_priot;
};

#endif // !defined(AFX_HASHTABLE_H__B98B72DB_0601_4B42_B259_59E8CBB1C59C__INCLUDED_)

// hashtable.cpp: implementation of the hashtable class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "hashtable.h"
#include <iostream>
using namespace std;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

static hashtable* s_hashtableArray[20];

hashtable::hashtable()
{
 m_next = NULL;
 m_priot = NULL;
}

hashtable::hashtable(int key)
{
 m_key = key;
 m_next = NULL;
 m_priot = NULL;
}

hashtable::~hashtable()
{
}

///////////////////////////////////////////////////////////////////////
//memberfunction
///////////////////////////////////////////////////////////////////////

hashtable* hashtable::InserttheNode(hashtable* new_node)
{
 int array_position = HashingFunction(new_node->m_key);
 if(IsExistedintheHashtable(new_node->m_key))
 {
  cout << "   The node you input is existed in the hash-table" << endl;
  return NULL;
 }
 else
 {
  if(s_hashtableArray[array_position]!=NULL)
  {
   s_hashtableArray[array_position]->m_priot = new_node;
  }
  new_node->m_next = s_hashtableArray[array_position];
  s_hashtableArray[array_position] = new_node;
  cout << "   The node you input has been inserted into the hash-table" << endl;
  return new_node;
 }
}

bool hashtable::HaveDeletetheNode(int key)
{
 int array_position = HashingFunction(key);
 hashtable* p = SearchtheNode(key);
 if(p==NULL)
 {
  cout << "   The node you input is not existed in the hash-table" << endl;
  cout << "Please check your input and try again" << endl;
  return false;
 }
 else
 {
  if(p->m_priot==NULL)
  {
   s_hashtableArray[array_position] = p->m_next;
  }
  else if(p->m_next==NULL)
  {
   p->m_priot->m_next = NULL;
  }
  else
  {
   p->m_priot->m_next = p->m_next;
   p->m_next->m_priot = p->m_priot;
  }
  delete p;
  return true;
 }
}

hashtable* hashtable::SearchtheNode(int key)
{
 int array_position = HashingFunction(key);
    hashtable* p = s_hashtableArray[array_position];
 while(p!=NULL)
 {
  if(p->m_key==key)
  {
   return p;
  }
  p = p->m_next;
 }
 return NULL;
}

int hashtable::HashingFunction(int key)
{
 return (key%19);
}

bool hashtable::IsExistedintheHashtable(int key)
{
 int array_position = HashingFunction(key);
 hashtable* p = s_hashtableArray[array_position];
 while(p!=NULL)
 {
  if(p->m_key==key)
  {
   return true;
  }
  p = p->m_next;
 }
 return false;
}

void hashtable::DisplaytheHashTable()
{
 hashtable* p = NULL;
 for(int i=0; i<20; i++)
 {
  p = s_hashtableArray[i];
  while(p!=NULL)
  {
   cout << p->m_key << "   ";
   p = p->m_next;
  }
  cout << endl;
 }
}

 

// chenchengnet_索引结构与散列技术.cpp : Defines the entry point for the console application.
//本程序用C++类编写而成

#include "stdafx.h"
#include "hashtable.h"
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
 hashtable* m_p = NULL;
 for(int i=1; i<51; i++)
 {
  m_p = new hashtable(i);
  m_p->InserttheNode(m_p);
 }
 cout << "新建立的散列表: " << endl;
    m_p->DisplaytheHashTable();
 cout << "删除2,5, 12, 15, 26, 28六个结点后的散列表: " << endl;
 m_p->HaveDeletetheNode(2);
 m_p->HaveDeletetheNode(5);
 m_p->HaveDeletetheNode(12);
 m_p->HaveDeletetheNode(15);
 m_p->HaveDeletetheNode(26);
 m_p->HaveDeletetheNode(28);
 m_p->DisplaytheHashTable();
 return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构7.4散列查找技术

  • 2014-12-16 17:12
  • 1.76MB
  • 下载

【数据结构】查找:散列技术

散列方法不同于顺序查找、二分查找、二叉排序树及B-树上的查找。它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,无须任何比较就可以找到待查关键字,查找的期望时间为O(1)。 散列表的...

聚簇、非聚簇索引结构及B树、位图、散列索引

索引的重要性 数据库性能优化中索引绝对是一个重量级的因素,可以说,索引使用不当,其它优化措施将毫无意义。 聚簇索引(Clustered Index)和非聚簇索引 (Non- Clustered I...

hashmap: 散列码和数组索引

看了这篇文章, 可以了解 散列码和数组索引还不是一回事,  在hashmap中hashcode要先经过运算得到一个h,然后h&(length-1),这样才得到数组索引.   什么是hashcode...

11索引与散列

SQL索引 SQL创建索引 SQL删除索引 码 基本索引类型 顺序索引:基于值的顺序排序 稠密索引:每个搜索码值都有一个索引项。 插入 删除 稀疏索引:只为搜索码某些值建立索引项 插入 删除 多级索引...

散列技术之链地址法(基于无序链表)

源代码如下: #include #include #define hash(v,M) (v % M) typedef char Key; struct Item{ Key key; }; typ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)