索引结构与散列技术 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;
}

索引技术详解(转)

一、数据表的基本结构 为认识索引工作原理,首先有必要对数据表的基本结构作一次全面的复习。 SQLS 当一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入...
  • wfyhewfy
  • wfyhewfy
  • 2016年03月10日 18:30
  • 481

Mysql索引结构及常见索引的区别

一、Mysql索引主要有两种结构:B+Tree索引和Hash索引 Hash索引 mysql中,只有Memory(Memory表只存在内存中,断电会消失,适用于临时表)存储引擎显示支持Hash索引,是M...
  • qq_19557947
  • qq_19557947
  • 2017年08月09日 11:39
  • 305

数据库系统——基于索引的存储结构

原文地址:http://dblab.cs.toronto.edu/courses/443/2013/04.basic-index.html 1. 采用索引的动机 Heap file支持大规模顺序扫描...
  • cjfeii
  • cjfeii
  • 2013年08月31日 10:21
  • 5892

Lucene 6.0 索引结构

1.复合文件索引 该模式是默认的。 1.1 目录结构 1.2 _x.cfe 1.3 _x.cfs 1.4 _x.si 2.多文件索引 IndexWriterConfig org.apache.l...
  • chuchus
  • chuchus
  • 2016年05月16日 20:03
  • 1727

分词与索引库

分词是很多做SEO的人常听到的概念,为了让大家在这个方面不会有疑惑,现在要来讲一下分词以及索引库。这也是更深入的了解搜索引擎的开始。 搜索引擎每天都是在处理一个基本的需求:用户搜索一个关键词,搜索引...
  • llw01
  • llw01
  • 2014年05月06日 13:34
  • 689

浅谈sql server索引结构

我们都知道sqlserver数据行的存储结构有两种:堆()
  • u014524247
  • u014524247
  • 2014年10月20日 12:39
  • 664

四种数据存储结构---顺序存储 链接存储 索引存储 散列存储

存储结构分四类:顺序存储、链接存储、索引存储和散列存储。
  • oohaha_123
  • oohaha_123
  • 2014年05月28日 21:02
  • 1472

B*树索引——Oracle的默认索引结构

1、B*树索引 1.1 概述        B*树索引是Oracle默认的索引结构。我们使用CREATE INDEX语句创建索引时,创建的就是B*树索引。B*树索引的结构一个二 叉树,由根节点(roo...
  • pursuer211
  • pursuer211
  • 2014年01月14日 10:58
  • 1754

下列关于文件索引结构的叙述中,哪些是正确的?

下列关于文件索引结构的叙述中,哪些是正确的? 正确答案: A B C   你的答案: B C (错误) 系统为每个文件建立一张索引表 采用索引结构会引入存储开销 ...
  • chengonghao
  • chengonghao
  • 2016年07月17日 15:36
  • 1804

Elasticsearch创建索引和映射结构详解

前言 这篇文章详细介绍了如何创建索引和某个类型的映射。 下文中[address]指代elasticsearch服务器访问地址(http://localhost:9200)。 1       创建...
  • GarfieldEr007
  • GarfieldEr007
  • 2017年01月19日 22:15
  • 1304
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:索引结构与散列技术 POWERBY CHenCHengNET
举报原因:
原因补充:

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