对指针数组的每个元素为头指针建立链表 出错!!
#include<stdlib.h>#include <stdio.h>
#include<string.h>
#define NAME_LENGTH 30 //姓名的个数
struct name //定义姓名结构体
{
char *pinyin; //名字所对应的拼音
//int key; //经过哈希函数计算得到的哈希表的 关键字 key
struct name *next;
};typedef name *pname;//声明指向此结构体的指针
name NameList[NAME_LENGTH]; //声明姓名数组
void initializename() //函数 initialize_name 是初始化姓名数组,即为姓名赋初值
{
NameList[0].pinyin="liyan";
NameList[1].pinyin="huxi";
NameList[2].pinyin="gaoxi";
NameList[3].pinyin="chaiwanying";
NameList[4].pinyin="zhangzhongqi";
NameList[5].pinyin="niuzihan";
NameList[6].pinyin="lifuhao";
NameList[7].pinyin="xiujingyang";
NameList[8].pinyin="yangzhiyong";
NameList[9].pinyin="zhangjianpeng";
NameList[10].pinyin="dubingshuai";
NameList[11].pinyin="zhulei";
NameList[12].pinyin="xuhaiyong";
NameList[13].pinyin="zhengxupeng";
NameList[14].pinyin="gaoxuekai";
NameList[15].pinyin="xuxi";
NameList[16].pinyin="fanghaojie";
NameList[17].pinyin="tuyaohui";
NameList[18].pinyin="lujinxin";
NameList[19].pinyin="zhangxiaoyu";
NameList[20].pinyin="xuhao";
NameList[21].pinyin="ouyangxu";
NameList[22].pinyin="chendanbo";
NameList[23].pinyin="linshuyuan";
NameList[24].pinyin="weiminglun";
NameList[25].pinyin="zhangsan";
NameList[26].pinyin="lisi";
NameList[27].pinyin="wangwu";
NameList[28].pinyin="zhaoliu";
NameList[29].pinyin="sunqi";
}
void insertHash()
{
int key,j,i;
pname p;
pname zhizhenshuzu[9]; //指针数组 其每个元素都是pname格式的指针变量用于存放指针。
for(i=0;i<=8;i++)//初始化
{
zhizhenshuzu[i]=NULL;//指针数组,元素未赋值,系统为他赋值随机数
}
for(j=0;j<=29;j++)
{
if(zhizhenshuzu[j%9]==NULL)
{
zhizhenshuzu[j%9]=(pname)malloc(sizeof(name));
zhizhenshuzu[j%9]->pinyin=NameList[j].pinyin;
printf("数组指针%d指向的第一个节点%d \n",j%9,*(zhizhenshuzu[j%9]->pinyin));
// 不可 *(zhizhenshuzu[j%9]).pinyin=NameList[j].pinyin;
//否则会导致 error: request for member `pinyin' in `zhizhenshuzu[(j % 9)]'
// which is of non-class type `name*'
}//if
else{
p=zhizhenshuzu[j%9];
while(p!=NULL)
{
p=p->next;
}//while 程序在这个地方过不去!!
p=(pname)malloc(sizeof(name));
p->pinyin=NameList[j].pinyin;
printf ("第%d个位置的链表中的pinyin为%d \n ",j,*(p->pinyin));
}
}//for
}
int main()
{
initializename();
insertHash();
}
运行结果:
数组指针0指向的第一个节点108
数组指针1指向的第一个节点104
数组指针2指向的第一个节点103
数组指针3指向的第一个节点99
数组指针4指向的第一个节点122
数组指针5指向的第一个节点110
数组指针6指向的第一个节点108
数组指针7指向的第一个节点120
数组指针8指向的第一个节点121
okPress any key to continue