#2
qweiuy5662016-07-09 11:04
今天又构思了一上午,终于弄出来了,感谢帮助我的各位。
#include<stdio.h> #include<iostream> #include<stdlib.h> using namespace std; typedef struct Node { struct Node *next; //后继节点 int weight; //值 int empty; //是否有值,有为1,没有为0 int xuhao; }HXNode; void chongtu(HXNode *p,int t); int chazhao(HXNode *L,int cha); main() { int i,c,cha; int a[10]; HXNode *L,*q,*p; //申请3个哈希指针 cout<<"请输入10个数"<<endl; //直接定义为10个数,否则还要根据n的值去求大于它的最小的素数,偷个懒 for(i=0;i<10;i++) { cin>>a[i]; if(a[i]<1) {cout<<"输入小于0,请重新输入"<<endl;--i; } } //10个数存入数组中 cout<<"您输入的值是:"<<endl; for(i=0;i<10;i++) { cout<<a[i]<<" "; } cout<<endl; L=(HXNode*)malloc(sizeof(HXNode)); p=L; L->next=NULL; L->empty=0; L->xuhao=0; L->weight=-1; //初始化空值为-1 for(i=1;i<=10;i++) { q=(HXNode*)malloc(sizeof(HXNode)); q->empty=0; q->xuhao=i; q->weight=-1; //初始化空值为-1 p->next=q; q->next=NULL; p=q; } p->next=L; //循环链表构建完成 for(i=0;i<10;i++) { p=L; //p置为表头 c=a[i]%11; //c是除完的余数 for(;;) { if(p->xuhao!=c)p=p->next; else { if(p->empty==0) { p->weight=a[i];p->empty=1;break; } else{ chongtu(p->next,a[i]);break;} } } } cout<<"下面是哈希表解决冲突后的值:"<<endl; for(i=0;i<=10;i++) { if(L->weight!=-1) cout<<L->xuhao<<":"<<L->weight<<endl; else cout<<L->xuhao<<":"<<"此格内值为空"<<endl; L=L->next; } for(;;) { cout<<"请输入要查找的数:"<<endl; cin>>cha; cout<<"您要查找的数在哈希表中第"<<chazhao(L,cha)<<"位"<<endl; } } int chazhao(HXNode *L,int cha) { for(;;) { if(L->weight!=cha)L=L->next; else break; } return L->xuhao+1; } void chongtu(HXNode *p,int t) { if(p->empty==0) { p->weight=t;p->empty=1; } else chongtu(p->next,t); } |
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct Node
{
struct Node *next; //后继节点
int weight; //值
int empty; //是否有值,有为1,没有为0
int xuhao;
}HXNode;
void chongtu(HXNode *p,int t);
main()
{
int i,c;
int a[10];
HXNode *L,*q,*p; //申请3个哈希指针
cout<<"请输入10个数"<<endl; //直接定义为10个数,否则还要根据n的值去求大于它的最小的素数,偷个懒
for(i=0;i<10;i++)
{
cin>>a[i];
if(a[i]<1) {cout<<"输入小于0,请重新输入"<<endl;--i; }
} //10个数存入数组中
L=(HXNode*)malloc(sizeof(HXNode));
p=L;
L->next=NULL;
L->empty=0;
L->xuhao=1;
for(i=1;i<10;i++)
{
q=(HXNode*)malloc(sizeof(HXNode));
q->empty=0;
q->xuhao=i+1;
p->next=q;
q->next=NULL;
p=q;
} p->next=L; //循环链表构建完成
for(i=0;i<10;i++)
{
p=L; //p置为表头
c=a[i]%11; //c是除完的余数
for(;;)
{
if(p->xuhao!=c)p=p->next;
else
{
if(p->empty==0)
{ p->weight=a[i];p->empty=1; }
else chongtu(p->next,a[i]);
}
}
}
for(i=0;i<10;i++)
{
cout<<L->xuhao<<":"<<L->weight<<endl;
L=L->next;
}
}
void chongtu(HXNode *p,int t)
{
if(p->empty==0) { p->weight=t;p->empty=1; }
else chongtu(p->next,t);
}
[此贴子已经被作者于2016-7-9 08:50编辑过]