user-0 提问: 语法报错，查过网站解决不了，望赐教

回复:
user: user-1
content: //哈希表的平方探测法 //#define MAXTABLESIZE 10000; //#define MINITABLESIZE 10; #define MAXTABLESIZE 10000 #define MINITABLESIZE 10 #include<stdio.h> #include<time.h> #include<math.h> #include<stdlib.h>    //定义哈希表结构 typedef int Position;//位置类型 typedef int ElementType;//key的元素类型 typedef enum{Legitimate,Empty,Deleted} EntryType;//定义EntryType的枚举类型 typedef struct HashTbl *HashTable; typedef struct HashEntry Cell;//Cell为哈希表存储信息的数据类型 struct HashEntry{ //散列表单元类型     EntryType Info;//单元状态     ElementType Data;//存放元素 };  typedef struct HashTbl{     int TableSize;//定义哈希表的大小     Cell *TheCells;//定义哈希表中的数组, }H;   //#define MiniTableSize 3;//指定最小的哈希表长度为3 #define MiniTableSize 3//指定最小的哈希表长度为3   //计算散列表的大小,返回大于N不超过MAXTABLESIZE的最小素数 //输入：一个整形实数 //输出：一个素数 int NextPrime(int N){     int i;     int p=(N%2)? N+2:N+1;//从大于N的下一个奇数开始     while(p <MAXTABLESIZE)     {         for(i = (int)sqrt(p); i>2 ; i--) //判断p是否可以被除了1和它本身整除         {             if (!(p%i)) break;//p不是素数         }         if (i==2)             break;//for循环结束，p是素数         else             p+=2;//否则试探下一个奇数     }     return p;  }  //初始化哈希表 HashTable initializeTable(int TableSize) //输入表长 {     HashTable H;     int i;      //1.判断是否散列表太小     if (TableSize < MINITABLESIZE )         printf("散列表太小");      //2.分配散列表     H =(HashTable)malloc(sizeof(struct HashTbl));//分配内存大小为sizeof(struct HashTbl)的字节数，分配成功则有指向内存的指针     if (H==NULL)         printf("内存溢出！");     H->TableSize =NextPrime(TableSize);//根据输入表长，确定散列表的大小      //3.分配散列表Cells     H->TheCells = (Cell *)malloc(sizeof(Cell)*H->TableSize);      //初始化状态单元为空单元     for(i = 0; i<H->TableSize;i++)         H->TheCells[i].Info= Empty;     return H;  }  //哈希函数 //输入：哈希表的大小，要计算的Key //输出：Key在哈希表中的位置 Position Hash(ElementType Key, int TableSize) {     return Key%TableSize; }   //在创建好的哈希表中，用平方探测法查找key的位置 Position Find(ElementType Key, HashTable H) {     Position CurrentPos,NewPos;     int CNum;     NewPos = CurrentPos = Hash(Key,H->TableSize);//经过哈希函数计算出哈希地址      //while(H->TheCells[NewPos].Info !=  NULL && H->TheCells[NewPos].Data != Key)     while(H->TheCells[NewPos].Info !=  Empty && H->TheCells[NewPos].Data != Key)     {          /*判断冲突次数。冲突次数和平方探测d_{i}之间有映射关系。           如果冲突次数为奇数，d_{i}为冲突次数+1的一半           如果冲突次数为偶数，d_{i}为冲突次数的一半 */          //冲突次数为奇数         if(++CNum %2)         {             NewPos = CurrentPos + (CNum+1)/2 * (CNum +1 )/2;             //防止新的探测位置超出散列表             while(NewPos > H->TableSize)                 NewPos=NewPos-H->TableSize;         }           //冲突次数为偶数         else         {             NewPos = CurrentPos + (CNum)/2 * (CNum)/2;             //防止新的探测位置小于散列表             while(NewPos < 0 )             {                 NewPos+=H->TableSize;             }         }          //找到key         return NewPos;     } }  /*    散列表的插入    输入：散列表、Key    输出：void    */  void Insert(ElementType Key, HashTable H) {     //先进行查找     Position Pos = Find(Key,H);     //if (H->TheCells[Pos]== Key)     if (H->TheCells[Pos].Data == Key)         printf("存在该Key:%d",Key);     //查找后判定是否插入     else         if(H->TheCells[Pos].Info!=Legitimate){             H->TheCells[Pos].Info = Legitimate;             H->TheCells[Pos].Data =  Key;         }  } 供参考～  三个问题： 第一个：宏定义后面加分号，去掉分号，注意宏定义和typedef的区别，在形式上。 第二个：Info和NULL比较？Info不是指针，它是枚举类型。 第三个：最后一个和key比较应该是Data数据。  上面的三个问题都一一修改了，供参考～详见代码