#include "hash.h"
Hash* create()
{
Hash *H=(Hash*)malloc(sizeof(Hash));
if(NULL==H)
{
puts("创建失败");
return NULL;
}
memset(H->arr,0,P);
return H;
}
Node* apply(datatype e)
{
Node *p=(Node*)malloc(sizeof(Node));
if(NULL==p)
{
return NULL;
}
p->data=e;
p->next=NULL;
return p;
}
int insert(Hash *H,datatype e)
{
if(NULL==H)
{
puts("传入的Hash表无效");
return -1;
}
Node *p=apply(e);
if(NULL==p)
{
puts("申请失败");
return -1;
}
int index=e%P;
p->next=H->arr[index];
H->arr[index]=p;
return 0;
}
void show(Hash *H)
{
//判断逻辑
if(NULL==H)
{
puts("传入的Hash非法");
return;
}
puts("各下标对应链表值为:");
for(int i=0;i<P;i++)
{
Node*p=H->arr[i];
printf("%d\t",i);
while(p)
{
printf("%d->",p->data);
p=p->next;
}
printf("nul\n");
}
}
void search(Hash *H,datatype e)
{
if(NULL==H)
{
puts("传入的Hash表无效");
return;
}
int index=e%P;
Node *p=H->arr[index];
while(p)
{
if(e==p->data)
{
break;
}
p=p->next;
}
if(p==NULL)
{
puts("没有找到");
}else
{
puts("找到了");
}
}
void free_hash(Hash *H)
{
if(NULL==H)
{
puts("传入的Hash表无效");
return;
}
for(int i=0;i<P;i++)
{
while(H->arr[i])
{
Node *q=H->arr[i];
H->arr[i]=q->next;
free(q);
q=NULL;
}
}
free(H);
H=NULL;
}
//快排
void part(int *arr,int low,int high)
{
if(low<high)
{
int i=low,j=high;
int temp=arr[low];
while(low<high)
{
while(low<high && arr[high]>=temp)
{
high--;
}
arr[low]=arr[high];
while(low<high && temp>=arr[low])
{
low++;
}
arr[high]=arr[low];
}
arr[low]=temp;
part(arr,i,low-1);
part(arr,low+1,j);
}else
{
return;
}
//插入排序
void insert_sort(int *s)
{
int i,j;
int temp;
for(i=1;i<N;i++)
{
temp=s[i];
for(j=i;j>0&&temp<s[j-1];j--)
{
s[j]=s[j-1];
}
s[j]=temp;
}
}
//主函数
int main(int argc, const char *argv[])
{
int arr[N]={198,289,98,357,85,170,232,110};
//maopao(arr);
//select(arr);
//insert_sort(arr);
//part(arr,0,N-1);
for(int i=0;i<N;i++)
{
printf("%d\t",arr[i]);
}
puts("");
return 0;
}