1. 程式人生 > >雙向連結串列習題(牛客網習題)

雙向連結串列習題(牛客網習題)

【說明】設有一個帶表頭結點的雙向迴圈連結串列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"); } }

【】表示需要填寫的程式碼
來源: