#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<xstring>
#include<string>
using namespace std;
struct hashlian//定義hash表的結點存盤結構
{
int key;//存盤關鍵字
hashlian*next;//地址指標
int Score;//分數
int age;
string xingbie;
string name;
};
void main()
{
int m=0;//
int i=0;//
int j=0;//輔助變數
int weizhi=0;//記錄元素對應的結點位置
int find=0;//記錄待查找的元素
hashlian *data;//存盤要操作的資料
hashlian*p1=NULL;
hashlian*p2=NULL;//指向結點的輔助指標
hashlian*hash=NULL;
cout<<"輸入最大資料個數";
cin>>m;//輸入hash表長
hash=new hashlian[m];//存盤hash表
data=https://bbs.csdn.net/topics/new hashlian[m];//動態開辟存盤空間
for(int ii=0;ii<m;ii++)//對hash表進行初始化
{
hash[ii].key=-1;
hash[ii].next=NULL;
}
cout<<"輸入資料(退出輸入-1)!"<<endl;
cout<<"第一個:";
cout<<"請分別輸入分數,年齡,性別,姓名"<<endl;
cin>>data[i].Score>>data[i].age>>data[i].xingbie>>data[i].name;
while(data[i].Score!=-1)//回圈輸入待操作的資料
{
if(i<=m-1)
{
i++;
cout<<"第"<<i+1<<"個:";
cin>>data[i].Score>>data[i].age>>data[i].xingbie>>data[i].name;
}
else
{
cout<<"越界了!"<<endl;
}
}
j=i;
for(i=0;i<j;i++)//鏈地址法處理沖突建立hash表
{
weizhi=data[i].Score%m;//定位存盤位置
if(hash[weizhi].key=-1)//若當前無元素直接存盤
{
hash[weizhi].key=data[i].Score;
hash[weizhi].age=data[i].age;
hash[weizhi].xingbie=data[i].xingbie;
hash[weizhi].name=data[weizhi].name;
}
else
{
p1=&hash[weizhi];
p2=p1->next;
while(p2!=NULL)//控制p2始終指向最后一個結點的下一位
{
p1=p2;
p2=p2->next;
}
p2=new hashlian;
p2->key=data[i].Score;//動態申請空間進行存盤后再插入
p2->age=data[i].age;
p2->name=data[i].xingbie;
p2->name=data[i].name;
p2->next=NULL;
p1->next=p2;
}
}
cout<<"輸入查找的資料:";cin>>find;
weizhi=find%m;//定位待查找資料的應存盤位置
p1=&hash[weizhi];
while(p1!=NULL)//從第一個位置開始回圈查找直到最后一個結點的下一位
{
if(p1->key==find)
{
cout<<"查找成功!"<<endl;
break;
}
p1=p1->next;
}
if(p1==NULL)//全部查找后仍沒有則查找失敗
{
cout<<"查找失敗!"<<endl;
}
}
老師讓我們寫課程設計,要用陣列鏈表法解決沖突,可是我要用結構體,或者是類寫,我總是理不清思路,要有增加,洗掉,查找的功能、、、、、
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/140566.html
標籤:茶館
