雙向連結串列習題(牛客網習題)
阿新 • • 發佈:2019-01-08
【說明】設有一個帶表頭結點的雙向迴圈連結串列L,每個結點有4個數據成員:指向先驅結點的指標prior、指向後繼結點的指標next、存放資料的成員data和訪問頻度freq。所有結點的freq初始時都為0.每當在連結串列上進行一次L.Locate(x)操縱時,令元素值x的結點的訪問頻度freq加1,並將該結點前移,連結到現它的訪問頻度相等的結點後面,使得連結串列中所有結點保持按訪問頻度遞減的順序排列,以使頻繁訪問的結點總是靠近表頭。
【函式】
void Locate(int &x)
{
*p=first->next;
while(p!=first && 【p->data!=x】)
p=p->next;
if(p!=first)
{
【p->freq++】;
*current=p;
current->prior->next=current->next;
current->next->prior=current->prior;
p=current->prior;
while(p!=first && 【current->freq>p-> freq】)
p=p->prior;
current->next=【p->next】;
current->prior=p;
p->next->prior=current;
p->next=【current】;
}
else
{
printf("Sorry.Not find!\n");
}
}
【】表示需要填寫的程式碼
來源: