标题:帮我看看,我说不哪错了,主要是标记那里
只看楼主
潺潺的小河
Rank: 2
等 级:论坛游民
帖 子:29
专家分:10
注 册:2019-3-2
结帖率:66.67%
 问题点数:0 回复次数:1 
帮我看看,我说不哪错了,主要是标记那里
程序代码:
#include"stdio.h"
#include"stdlib.h"

#define defaultSize 11

typedef enum KindOfState
{
    Active,
    Blank,
    Deleted
}KindOfState;
  
typedef int KeyType;

typedef struct{
    KeyType key;
}HElemType;
typedef struct{
    int divisor;//除数 
    int n,m;//已用地址数 ,最大地址数
    HElemType *data;//散列表存储数组
     KindOfState *state;//状态数组
    int *cout;//探索次数数组 
}HashTable;

void initHashTable(HashTable *HT,int d)
// d为不要大于m 但是接近于m的质数 
{
    int i=0;
    HT->divisor=d;
    HT->m=defaultSize;
    HT->n=0;
    HT->data=(HElemType*)malloc(HT->m*sizeof(HElemType));
    HT->state=(KindOfState*)malloc(HT->m*sizeof(KindOfState));
    HT->cout=(int*)malloc(HT->m*sizeof(int));
    for(i=0;i<HT->m;i++)
    {
        HT->state[i]=Blank;
        HT->cout[i]=0;
    }
}

//可加入 LInearProde 文件 
int FindPos(HashTable &HT,KeyType x,int &i,int &num)
{
    i=x%HT.divisor;num=0;//num表示探索次数 
    if(HT.state[i]==Active&&HT.data[i].key==x)
    {
        num++;
        return 1;
    }
    else
    {
        int j=i;
        do{
            num++;
            if(HT.state[i]!=Active)
            {
                return 1;
            }
            else if(HT.state[i]!=Active)
            {
                return 0;//找到空位 
            }
            i=(i+1)%HT.m;//向后探索 ,这种方式 能够最大程度的利用表 
        }while(j!=i);//i===j表满 
         i=-1;
         return 0;
    }
}

int Insert(HashTable &HT,HElemType elem)
{
    int i,num,flag;
    flag=FindPos(HT,elem.key,i,num);
    if(flag)
     { 
      printf("表中已有此元素,不能插入\n");
      return 0;
      
     }
     else if(i==-1)
     {
         printf("表已满\n");
         return 0;
     }
     HT.data[i]=elem;
     HT.state[i]=Active;
     HT.cout[i]=num;
     HT.n++;     
} 

void CreatrHashTable(HashTable &HT,KeyType A[],int n)//这里(1) 
{
  int i;
  HElemType Elem;
  for(i=0;i<n;i++)
  {
     Elem.key=A[i];
     Insert(HT,Elem);
  }
}
void PrintfHashTable(HashTable&HT)
{
    int i;
    for(i=0;i<HT.m;i++)
     if(HT.state[i]==Active)
       printf("[%d]%d[%d]\n",i,HT.data[i].key,HT.cout[i]); 
}

int main()
{
    KeyType A[8]={37,25,14,36,48,68,57,11};
    HashTable t;
    initHashTable(&t,11);
    CreatrHashTable(&t,A,8); //这里 (2) 
    return 0;
}
搜索更多相关主题的帖子: num state Active int return 
2019-05-10 17:06
潺潺的小河
Rank: 2
等 级:论坛游民
帖 子:29
专家分:10
注 册:2019-3-2
得分:0 
主要是CreatesHashtable()函数那里
2019-05-10 17:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494660-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.387780 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved