美文网首页数据结构和算法分析
线性表(四)——循环链表

线性表(四)——循环链表

作者: China第一程序员 | 来源:发表于2018-11-21 10:04 被阅读0次

循环链表

构造原理

循环链表是指链表中最后那个链结点的指针域存放指向链表最前面那个结点的指针,整个链表形成一个环。分为不带头结点的循环链表和带头结点的循环链表,最长使用的是不带头结点的(p=list)。


基本操作

1、求循环链表的长度

int LENGTH( LinkList list ){
    LinkList p=list;
    int n=0;            /* 链表的长度置初值0*/
    do{
         p=p->link;
         n++;
   }while( p != list);
   return n; /* 返回链表的长度n */
}

2、约瑟夫(JOSEPHU)问题
已知n个人(不妨分别以编号1,2,3,…,n代表)围坐在一张圆桌周围,编号为k的人从1开始报数,数到m的那个人出列,他的下一个人又从1开始继续报数,数到m的那个人出列,…,依此重复下去,直到圆桌周围的人全部出列。直到圆桌周围只剩一个人。


需要做的工作:
1、建立一个不带头结点的循环链表;
2、找到第一个出发点;
3、反复删除一个链结点;

void JOSEPHU( int n, int m, int k ){ 
    LinkList list,p,r;
    int i;
    list=NULL;
    for(i=1;i<=n;i++) { 
        p = (LinkList)malloc(sizeof(LNode));
        p->data=i;
        if (list==NULL) 
            list=p;
        else
            r->link=p;
        r=p;
    }
    p->link=list; 
    /* 至此建立循环链表步骤完成*/
    p=list;
    for(i=1;i<=k-1;i++) {       /* 找到第一个点,此时p指向第一个出发节点*/
         r=p;
         p=p->link;
    }             
    while(p->link != p) {
        for(i=1;i<=m-1;i++){
            r=p;                         //不多余,当k!=1但m=1时没有此句话删除动作无法进行
            p=p->link;
        }                                    //p指向第m个节点,r指向第m-1个节点
        r->link=p->link;             //删除第m个节点
        printf(“%3d”,p->data);    //输出一个节点编号
        free(p);                          //释放被删除节点的空间
        p=r->link;                      //p指向新的出发节点
    }
    printf(“\n最后被删除的节点是%4d”, p->data);      //输出最后被删除节点的编号
}

相关文章

  • 数据结构-单向链表

    一、线性表 线性表可以分为: 顺序表(数组) 链表(单向链表、双向链表、循环链表) 二、链表 链表是一种链式存储的...

  • 数据结构与算法之数组与链表

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 数据结构与算法之栈与队列

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 数据结构与算法——线性表3

    线性表——单向循环链表 3、单向循环链表 在单向链表的基础上,单向链表的尾结点的Next指向链表的头部,就是为循环...

  • 线性表(三)——双向链表的表示和实现

    在上篇文章中我们分析讨论了线性表的链式存储结构。链式存储结构表示的线性表主要分为单链表、单循环链表和双向循环链表三...

  • 学习数据结构第一弹 线性表(5)

    循环链表与双向链表 循环链表: 循环链表也是一种线性表的链式存储结构,其实他和单链表很像,其特点是它是一个环,也就...

  • 线性表之顺序表和链表(单/双链表,单/双循环链表)

    线性表按存储方式分为顺序表和链表两种,其中链表又分为单链表,循环链表,双链表,双向循环链表。 顺序表 顺序表采用顺...

  • 数据结构和算法一(线性表和单链表)

    一、前言 二、数据结构 三、线性表: 3、我们在来看顺序存储方式的特点 4、链式存储结构: 四、线性表(循环链表)...

  • 线性表(四)——循环链表

    循环链表 构造原理 循环链表是指链表中最后那个链结点的指针域存放指向链表最前面那个结点的指针,整个链表形成一个环。...

  • 单链表线性表

    用链表来表示线性表,还有循环链表,双向链表其中算法很多都是相同的,循环链表的特点是最后一个指针指向头指针,双向链表...

网友评论

    本文标题:线性表(四)——循环链表

    本文链接:https://www.haomeiwen.com/subject/xysqqqtx.html