}//½áÊøËã·¨Rank
Ëã·¨2£º±¾ÌâµÄÁíÒ»ÖֽⷨÊÇÉèrÊÇÒÔ*xΪ¸ùµÄÖÐÐòÐòºÅ¡£Í¬Ñù£¬ÈôxµÄ×ó×ÓÊ÷Ϊ¿Õ£¬r=1;·ñÔò£¬r=x->lchild->size+1¡£ÀûÓýáµãµÄË«Ç×Óò£¬ÉÏËÝÖÁ¸ù½áµã£¬¼´¿ÉÇóµÃ*xµÄÖÐÐòÐòºÅ¡£
int Rank£¨tree T£¬node *x£©
// ÔÚ¶þ²æÅÅÐòÊ÷TÉÏ£¬Çó½áµãxµÄÖÐÐòÐòºÅ
{{if£¨x->lchild£©r=x->lchild->size+1£»else r=1£»//xµÄÕâ¸öÐòºÅÊÇÔÝʱµÄ p=x; //pÒªÉÏËÝÖÁ¸ù½áµãT£¬Çó³ö*xµÄÖÐÐòÐòºÅ while (p!=T)
{if (p==p->parents->rchild) //pÊÇÆäË«Ç×µÄÓÒ×ÓÅ® {if (p->parents->lchild==null) r++; else r=r+p->parent->lchild->size+1; }
else r-- //pÊÇÆäË«Ç×µÄ×ó×ÓÅ® p=p->parents; }//while return (r); }//Rank
25£®[ÌâÄ¿·ÖÎö] ±¾Ìâδֱ½Ó¸ø³ö¹þÏ£±í±í³¤£¬µ«ÒѸø³ö×°ÌîÒò×ÓСÓÚ1£¬ÇÒ¹þÏ£º¯ÊýH£¨k£©Îª¹Ø¼ü×ÖµÚÒ»¸ö×ÖĸÔÚ×Öĸ±íÖеÄÐòºÅ£¬×Öĸ¡®A¡¯µÄÐòºÅΪ1£¬±í³¤¿ÉÉèΪn£¨n¡Ý27£©£¬¶øÁ´µØÖ··¨ÖУ¬±í³¤26¡£²éÕÒ²»³É¹¦ÊÇÖ¸Åöµ½¿ÕÖ¸ÕëΪֹ£¨ÁíÒ»ÖÖ¹ÛµãÊÇ¿ÕÖ¸Õë²»¼ÆËã±È½Ï´ÎÊý£©¡£
£¨1£©void Print(rectype h[ ]£©
//°´¹Ø¼ü×ÖµÚÒ»¸ö×ÖĸÔÚ×Öĸ±íÖеÄ˳ÐòÊä³ö¸÷¹Ø¼ü×Ö {int i,j£»
for£¨i=0;i¡Ü26£»i++£© // ¹þÏ£µØÖ·0µ½26 {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£©£» }
26£®[ÌâÄ¿·ÖÎö]·ÇÁãÔªËØ¸öÊýÊÇ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
27£®[ÌâÄ¿·ÖÎö] ±¾Ìâ¹þÏ£º¯Êý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£©£»} //ÕÒµ½ºÏÊʹþÏ£µØÖ·£¬²åÈë