俊介三

一天更新一点,一天积累一点

导航

循环链表

Posted on 2013-03-23 20:06  俊介三在前进  阅读(213)  评论(0)    收藏  举报

有单循环和双循环链表两种。就是最后一个Node又指回头一个Node而形成一个环。

它的一个例子是:LRU(最近最少使用)页面置换算法的其中一种实现-第二次机会置换法。

当空闲页面链表为空时,系统将如何分配新的页帧?
第二次机会置换法,它的工作方式是:维护一个当前存在于物理内存中的页面循环链表。假设链表中的每个元素只存储一个页码和一个引用值,引用值要么为1要么为0.在实践中,每个元素还会包含其他的信息。所有的页面初始的引用值都为0,每当系统访问页面时。该页面的应用值就设置为1.当需要某个页帧时操作系统就使用它维护的循环链表以及引用值来判断哪些页面应该释放其页帧。为了确定这一点开始遍历链表直到找到一个引用值为0的元素。当遍历每一个页面时,操作系统将页面的引用值从1重设回0.一旦它遇到的引用为0的元素,就是找到了一个上次便利链表以来都没有被系统访问的页面。就是最近很少使用的页面。
就是说:你现在是1了,我把你置为0,不换你,给你一次机会了。下次我找到0的话,肯定是给过机会的页帧,我就不放过,狠心地把你置换掉,因为这时你是最近最少使用的。

循环链的结构(CList = CycleList):

#include <stdio.h>
#include <stdlib.h>

struct CList{
    int data;
    CList* next;
    CList(){}
    CList(int d){
        data = d;
        next = NULL;
    }
    CList(int d, DList* n){
        data = d;
        next = n;
    }
};

int main(){
    //almost the same as single linked list~
    return 0;
}