2 qingchunmeimeng qingchunmeimeng 于 2013.06.12 09:57 提问

我在做课程设计的时候出现问题了
#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=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;
    }

}

老师说要用数组链表发解决冲突,要有增加,删除,查找的功能,每次准备用类或结构体写,思路总是理不清楚、、、、

1个回答

morgerton
morgerton   2017.09.27 18:26

告诉你,13年的时候我才大二,我穿越回来解决你的问题,C语言里面并没有各种数据结构,全部都得自己实现,要不,遇到数据量比较大的就不行了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!