这个哈希表程序出了点问题  不能实现哈希表的删除功能 会有随机值输出  
跪求大神帮我看一下改怎么改
下面是源代码:
#include<stdio.h>
#include<string.h>
#define SUCCESS 1;
#define UNSUCCESS 0;
#define NULLKEY -1;
#define Tablelength 13; 
#define p 13;//H(key)=key % p
#define MAXSIZE 25typedef int T;
template<class T>
struct ElemType
{
T key;//关键字
};
template <class T>
class LHSearch
{
private:
ElemType<T>*HT;//开放定址哈希表
int count;//当前数据元素个数
int size;//哈希表长度
public:
LHSearch();//
  ~LHSearch();//
void InitHashTable(int n);//
int Hash(T key);//计算哈希地址
void Collision(int &s);//冲突,计算下一个地址
int Search(T key,int &s);//哈希查找
int Insert(ElemType<T> e);//元素插入
int Delete(ElemType<T> e);//元素删除
void Display();//显示哈希表
};
template<class T>
LHSearch<T>::LHSearch()
{
HT=NULL;
size=0;
count=0;
}
template<class T>
LHSearch<T>::~LHSearch()
{
delete[] HT;
count=0;
}
template<class T>
int LHSearch<T>::Hash(T key)
{//由哈希函数求哈希地址
return key%p;
}
template<class T>
void LHSearch<T>::Collision(int &s)
{//开放定址解决冲突
s=s++;
}
template <class T>
int LHSearch<T>::Search(T key,int &s)
{//查找,找到返回
// int s;
s=Hash(key);
while ((HT[s].key!=-1)&&(key!=HT[s].key))
Collision(s);
if(HT[s].key==key)
return 1;
else
return 0;
}
template <class T>
int LHSearch<T>::Insert(ElemType<T> e)
{//插入元素
int s;
if(count==size)
{
printf("表满,不能插入!\n");
return UNSUCCESS;
}
else 
{
  s=Hash(e.key);
  int f;
  f=Search(e.key,s);
  if(f)//表中已有和e的关键字相同的元素,不进行插入操作
  {
  printf("该元素已存在,不能插入!\n");
  return UNSUCCESS;
  }
  else
 {
  HT[s].key=e.key;
  printf("插入成功!\n");
  count++;
  return SUCCESS;
  }
}

} template <class T>
 int LHSearch<T>::Delete(ElemType<T> e)
 {
 //删除元素
 int s,i;
 if(count==NULL)
 {
 printf("表空,不能删除!\n");
 return UNSUCCESS;
 }
 else
 {
 s=Hash(e.key);
 int q;
 q=Search(e.key,s);
 if(q)
 {
while(HT[s].key)
    HT[s++].key=HT[s+1].key;
 printf("删除成功!\n");
 count--;
 return SUCCESS;
 }
 else{
 printf("该元素不存在,不能删除!\n");
 return UNSUCCESS;
 }
 }
 }
 template<class T>
 void LHSearch<T>::InitHashTable(int n)
 {
 size=n;
 HT=new ElemType<T>[size];
 for(int i=0;i<size;i++)//初始化,把哈希表置空
 HT[i].key=NULLKEY;
 }
 template<class T>
 void LHSearch<T>::Display()
 {
 int i;
 for(i=0;i<size;i++)
 if(HT[i].key!=-1)
     printf("%d\t",i);
 printf("\n");
 for(i=0;i<size;i++)
 if(HT[i].key!=-1)
 printf("%d\t",HT[i].key);
     printf("\n");
 }
 void main()
 {
 int m;
 T key;
 int s=0;
 ElemType<int> e;
     LHSearch<int> a;
 printf("输入相应代码,必须先创建哈希表\n");
 printf("\t|                                                |\t\n");
         printf("\t|                  哈希表应用                    |\t\n");
 printf("\t|                                    欢迎使用!   |\t\n");
 printf("\t|================================================|\t\n");
 printf("\t|                                                |\t\n");
 printf("\t|【1】-->建立!\t 【2】-->插入!\t 【3】-->删除!   |\t\n"); 
 printf("\t|                                                |\t\n");
 printf("\t|        【4】-->查找!\t    【5】-->退出!        |\t\n"); 
 printf("\t|                                                |\t\n");
       do
   {
         printf("请选择你想进行的操作:");
 scanf("%d",&m);
 switch(m)
 {
 case 1://创建查找表
 //printf("请输入表容量:\n");
 //scanf("%d",&m);
 a.InitHashTable(MAXSIZE);
 printf("依次输入表元素,-1结束:\n");
 for(scanf("%d",&e.key);e.key!=-1;scanf("%d",&e.key))
             a.Insert(e);
             a.Display();
 break;
         case 2://插入元素
 printf("依次输入要插入的元素:\n");
 scanf("%d",&e.key);
 a.Insert(e);
             a.Display();
 break;
 case 3://删除元素
 printf("输入要删除的元素:\n");
 scanf("%d",&e.key);
             a.Delete(e);
             a.Display();
 break;
 case 4://查找元素
 printf("输入查找关键字:\n");
 scanf("%d",&key);
 if(a.Search(key,s))
 printf("找到!\n");
 else
                 printf("不存在,未找到!\n");
 break;
 case 6://结束
 printf("结束!感谢您的使用\n");
 break;
 }
 }
while(m!=5);
 }