• 链接技术解决冲突的散列表


    #include<iostream>
    #define M 30              //定义hash表的大小
    #define NULLDATA -1      
    
    #define H(A) (A%M )      //除余法hash函数
    using namespace std;
    
    typedef struct node *link;
    
    typedef struct node
    {
      int data;
      link next;
    
    }node;
    link Table[M];
    link p[M];                  //辅助插入指针
    
    static int k;       //统计查找元素所需时间
    
    void Init()   //初始化
    {
      
      for(int i = 0; i < M; i++)
    	 {
    	  
    	  Table[i] = NULL;	  
      }
    }
    
    link newnode(int v)
    {
      link c = (node *)malloc(sizeof(node));
           c->data = v;
    	   c->next = NULL;
      return c;
    }
    
    void Insert(int v)
    {  
      int i = H(v);
      if(Table[i] == NULL)
      { 
        p[i] = newnode(v);
    	Table[i] = p[i];
      }
      else
      { 
        
    	p[i]->next = newnode(v);
    	p[i] = p[i]->next;
    	
      }
       
    }
    
    int find_list(link h,int v)  //slot中的查找操作
    { 
      while(h->data != v && h->next != NULL)
      {
        h = h->next;
    	k++;
      }
       if(h->next == NULL)
    	   return NULLDATA;
       else
       return h->data;
    
    }
    
    int find(int v)            //Table查找操作
    { int tmp;
      int j = H(v);
      if(Table[j] != NULL)
    	 tmp = find_list(Table[j],v);
      else
    	  return NULLDATA;
      return tmp;
    }
    
    int Delete_list(link h, int v)  //删除slot中的元素
    {  link aux;
       int tmp;
      while(h->data != v)
      {   aux = h;
    	  h = h->next;
      }
      aux->next = h->next;
      tmp = h->data;
      return tmp;
    }
    
    int Delete(int v)   //Table删除操作
    { 
      int j = H(v);
      int tmp;
      if(Table[j] != NULL)
         tmp = Delete_list(Table[j],v);
      else
    	  return NULLDATA;
       return tmp;
    }
    
    int main()  
    {   
    	 
    	Init();
    	for(int i = 0; i < 10000; i++)
    		Insert(i);
    
       cout<<find(33)<<endl;
       cout<<Delete(33)<<endl;
       cout<<find(9967)<<endl;
       cout<<k<<endl;
        return 0;
    }

    查找时间为:(1+a) a为装载因子。分析见导论P135~136。

  • 相关阅读:
    微信公众号项目部署
    数据库存入年月日时分秒类型时间问题
    路径问题
    常用DOS命令
    解决Maven下载慢的问题
    害人不浅的数学翻译
    Webpack4 踩坑记
    React 踩坑记
    what's the problem of Object oriented programming
    为什么JVM调优?
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3091442.html
Copyright © 2020-2023  润新知