雙鏈表按訪問頻度域freq的值的遞減序排列

2021-07-10 16:40:32 字數 1099 閱讀 7419

問題及**:

/*

*檔名稱:table.cpp

*作 者:單昕昕

*完成日期:2023年3月23日

*版 本 號:v1.0

**問題描述:設有乙個雙鏈表,每個結點中除有piror,data,next三個域外,還有乙個訪問頻度域freq,

在鍊錶被起用之前,其值均初始化為零.每當進行locatenode(h,x)運算時,令元素值為x的結點中freq域的值加1,

並調整表中結點的次序,使其按訪問頻度的遞減序排列,以便使頻繁訪問的結點總是靠近表頭。

試寫一符合上述要求的locatenode運算的演算法。

*程式輸入:無。

*程式輸出:雙鏈表。

*/#include #include using namespace std;

typedef struct dnode

dinklist;

dinklist *h;

void sort(dinklist *&h)//根據freq降序排列,寫成乙個函式,下面沒有呼叫只是當做測試用,因為作業要求只寫乙個函式

}void locatenode(dinklist *&h,int x)

p->freq++;//x元素的freq++

//sort(h);//下面是sort

dinklist *q,*pre;

p=h->next->next;

h->next->next=null;

while(p!=null)

}int main()

//下面是測試**

直接根據freq的值用排序做。

雙鏈表建立 遍歷 按頻度排列

題目 雙鏈表的每個節點除有prior 前驅指標 next 後繼指標 data 元素值 還增加了訪問頻度域 freq 在鍊錶被啟用前,其初始值均為0,每當鍊錶進行一次locate l,x 運算時,令元素值為x的節點中的freq域值加1,並使此鍊錶中結點按照頻度非增的順序排列,同時最近訪問的結點排在頻度...

單鏈表 雙鏈表

實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...

單鏈表和雙鏈表

單鏈表 單鏈表只有乙個指向下一結點的指標,也就是只能next 雙鏈表 雙鏈表除了有乙個指向下一結點的指標外,還有乙個指向前一結點的指標,可以通過prev 快速找到前一結點,顧名思義,單鏈表只能單向讀取 為什麼市場上單鏈表的使用多餘雙鏈表呢?從儲存結構來看,每個雙鏈表的節點要比單鏈表的節點多乙個指標,...