{j=1£»printf£¨¡°\\n¡±£©£»
while£¨h[j]!=null£© // Éè¹þÏ£±í³õʼֵΪnull
{if£¨ord£¨h[j]£©==i£©// ord£¨£©È¡¹Ø¼ü×ÖµÚÒ»×ÖĸÔÚ×Öĸ±íÖеÄÐòºÅ printf£¨¡°%s¡±£¬h[j]£©£»j=(j+1)% n£» }}}
£¨2£©int ASLHash£¨rectype h[ ]£©
// ÇóÁ´µØÖ·½â¾ö³åÍ»µÄ¹þÏ£±í²éÕÒ²»³É¹¦Ê±µÄƽ¾ù²éÕÒ³¤¶È {int i,j£»count=0£»//¼Ç²éÕÒ²»³É¹¦µÄ×ܵĴÎÊý
LinkedList p£» for£¨i=0;i¡Ü26£»i++£©
{p=h[i]£»j=1£»//°´ÎÒÃÇÔ¼¶¨£¬²éÕÒ²»³É¹¦Ö¸µ½¿ÕÖ¸ÕëΪֹ¡£ while£¨p!=null£©{j++£»p=p->next£»} count+=j£» }
return £¨count/26.0£©£» }
24£®[ÌâÄ¿·ÖÎö]·ÇÁãÔªËØ¸öÊýÊÇ100£¬¸ºÔØÒò×ÓÈ¡0.8£¬±í³¤125×óÓÒ£¬È¡pΪ127£¬É¢ÁеØÖ·Îª0µ½126¡£¹þÏ£º¯ÊýÓÃH(k)=(3*i+2*j) % 127£¬i£¬jΪÐÐÖµºÍÁÐÖµ¡£ #define m 127 typedef struct
{int i£¬j£»datatype v;}triple£» void CreatHT£¨triple H[m]£©
//100¸ö·ÇÁãÔªËØÉú³ÉÏ¡Êè¾ØÕóµÄ¹þÏ£±í£¬±íÖÐÔªËØÖµ¾ù³õʼ»¯Îª0¡£ {for£¨k=0£»k<100£»k++£©
{scanf£¨&i,&j,&val£©£»//ÉèÔªËØÖµÎªÕûÐÍ h=(3*i+2*j)% m£» //¼ÆËã¹þÏ£µØÖ·
while£¨HT[h].v!=0£©) h=(h+1) % m; //ÏßÐÔ̽²â¹þÏ£µØÖ· HT[h].i=i£»HT[h].j=j£»HT[h].v=val£» //·ÇÁãÔªËØ´æÈë¹þÏ£±í }
}//Ëã·¨CreatHT½áÊø
datatype Search£¨triple HT[m]£¬int i£¬int j£©
//ÔÚ¹þÏ£±íÖвéÕÒϱêΪi£¬jµÄ·ÇÁãÔªËØ£¬²éÕҳɹ¦·µ»Ø·ÇÁãÔªËØ£¬·ñÔò·µ»ØÁãÖµ¡£ {int h=(3*i+2*j) % m£»
while ((HT[h].i!=i || HT[h].j!=j) && HT[h].v!=0) h=£¨h+1£©% m£» return £¨HT[h].v£©£» }//Search
25£®[ÌâÄ¿·ÖÎö] ±¾Ìâ¹þÏ£º¯ÊýH£¨key£©£¬ÓÃÏßÐÔ̽²â½â¾ö³åÍ»£¬¿Õµ¥ÔªÓÃEMPTY£¬É¾³ý±ê¼ÇÓÃDELETED£¬Õ¼Óõ¥ÔªÓÃINUSE£¬ÆäËü¾ù·ûºÏ¹þÏ£±í±ê×¼²Ù×÷¡£ £¨1£©int Search(rectype HT[]£¬int m£¬datatype key£©
//ÔÚ³¤¶ÈΪmµÄ¹þÏ£±íHTÖвéÕҹؼü×Ökey£¬Èô²éÕҳɹ¦£¬·µ»Øtrue£¬·ñÔò·µ»Øfalse¡£
{i=H£¨key£©£» // ¼ÆËã¹þÏ£µØÖ·
if£¨HT[i]==EMPTY£©return £¨false£©£» //²éÕÒʧ°Ü else if£¨HT[i]== key£©return £¨true£©£» else {j=(i+1)% m£» //ÐγÉ̽²âÐòÁÐ while£¨j!=i£© //ÖÁ¶àÑ»·¹þÏ£±í³¤
{if£¨HT[j]==key£© return £¨true£©£» //²éÕҳɹ¦ else if£¨HT[j]==EMPTY£©return £¨false£©£»//²éÕÒʧ°Ü
j=£¨j+1£©% m£»
}
return £¨false£©£»//²é±é¹þÏ£±í£¬Î´²éµ½¸ø¶¨¹Ø¼ü×Ökey
}//else
//½áÊøSearch
£¨2£©int Insert£¨rectype HT[]£¬int m£¬datatype key£© //ÔÚ³¤ÎªmµÄ¹þÏ£±íÖвåÈë¹Ø¼ü×Ökey {i=H£¨key£©£»//¼ÆËã¹þÏ£µØÖ·
if£¨HT[i]==EMPTY || HT[i]==DELETED£© //ÈôHT[i]¿Õ»òɾ³ý±ê¼Ç¡£ {HT[i]=key£»return £¨true£©£»} //²åÈë³É¹¦ else //̽²â²åÈëÔªËØµÄÉ¢ÁеØÖ· {j=(i+1)% m£» while£¨j!=i£©
{if£¨HT[j]==EMPTY || HT[j]==DELETED£©
{HT[j]=key£»return £¨true£©£»} //ÕÒµ½ºÏÊʹþÏ£µØÖ·£¬²åÈë j=£¨j+1£©%m£» }
return £¨false£©£»//ÎÞ¿ÕÏйþÏ£¿Õ¼ä£¬²åÈëʧ°Ü }
}//½áÊøInsert
£¨3£©int Delete(rectype HT[]£¬int m£¬datatype key£© //ÔÚ³¤ÎªmµÄ¹þÏ£±íHTÖУ¬É¾³ý¹Ø¼ü×Ökey
{i=H(key)£» //¼ÆËã¹þÏ£µØÖ·
if£¨HT[i]==key£©//²éµ½¹Ø¼ü×ÖΪkeyµÄ¹þÏ£µØÖ·
{HT[i]=DELETED£»return £¨true£©£»} //ÖÃɾ³ý±ê¼Ç¡£ else //Ðγɹþϣ̽²âµØÖ·£¬²éÕҹؼü×Ökey
{j=£¨i+1£©% m£»
while£¨j!=i£©
{if£¨HT[j]==EMPTY£© return £¨false£©£» //Î޹ؼü×Ökey else if£¨HT[j]==key£©{ HT[j]==DELETED £»return £¨true£©£»}
j=£¨j+1£©% m£»
}
return £¨false£©£»//±íÖÐÎ޹ؼü×Ökey }//else
}//Ëã·¨Delete½áÊø 26£®#define m 11 typedef struct node
{datatype key£» //¹Ø¼ü×Ö
struct node *next£»//Á´Ö¸Õë }Lnode£¬*LinkedList£»
typedef datatype int£»
typedef struct node *HLK; void Creat£¨HLK HT[m]£©
//ÓÃÁ´µØÖ··¨½â¾ö³åÍ»£¬¹¹ÔìÉ¢ÁÐ±í£¬É¢Áк¯ÊýÓÃH£¨key£©=key % 11
{for£¨i=0£»i for£¨i=0£»i p=£¨LNode*£©malloc£¨sizeof £¨LNode£©£©£» p->key=x£»p->next=HT[j]£»HT[j]=p£»//½«²åÈë½áµãÁ´ÈëͬÒå´Ê±í } }//Creat ²éÕҳɹ¦Ê±µÄƽ¾ù²éÕÒ³¤¶ÈASL=12/9¡£ 27£®[ÌâÄ¿·ÖÎö] ±¾ÌâʵÖÊÉÏÊÇÅÅÐòÌ⣬ÒòÉæ¼°µ½Ë³Ðò±íºÍË÷Òý±í¶ø·ÅÔÚÕâÀ˳Ðò±íÎÞÐò£¬Ë÷Òý±íÓÐÐò¡£ÓÉ˳Ðò±íÖеĹؼü×Ö¼°ÆäÏÂ±êµØÖ·×é³ÉË÷Òý±íÖеÄÒ»Ï˳Ðò±íÓÐm¸ö¼Ç¼£¬Ë÷Òý±íÓ¦ÓÐmÏî¡£½¨Á¢Ë÷Òý±íÒ˲ÉÓá°Ö±½Ó²åÈëÅÅÐò¡±£¬ÕâÑù²ÅÄÜÔÚ˳Ðò±íÓÐÐòʱ£¬Ëã·¨¸´ÔÓ¶È´ïµ½×îºÃO(m)¡£ #define m ˳Ðò±íÖмǼ¸öÊý typedef struct node {keytype key£»//¹Ø¼ü×Ö int adr£» //¸Ã¹Ø¼ü×ÖÔÚ˳Ðò±íÖеÄϱê }idxnode£» //Ë÷Òý±íµÄÒ»Ïî typedef struct node {keytype key£» //¹Ø¼ü×Ö anytype other£»//¼Ç¼ÖÐµÄÆäËüÊý¾Ý }datatype void IndexT(idxnode index[m+1],datatyp seq[m+1]) //¸øÓиöm¼Ç¼µÄ˳Ðò±íseq½¨Á¢Ë÷Òý±íindex {index[1].key=seq[1].key; index[1].adr=1; for (i=2,i<=m,i++) {j=i-1; index[0].key=seq[i].key; //¼àÊÓÉÚ while(index[j].key {index[j+1]=index[j]; j--;} index[j+1].key=index[0].key; //¹Ø¼ü×Ö·ÅÈëÕýȷλÖà index[j+1].adr=i; //µÚi¸ö¼Ç¼µÄϱê } }//IndexT