• 数据结构(java版)学习笔记(四)——线性表之循环链表


    单向循环链表

    PS:有阴影的结点是头结点

    概念:

    最后一个结点的链域值不为NULL,而是指向头结点

    特点:

    从表中的任意结点出发,都可以找到表中其他结点

    循环条件

    p==h

    双向链表

    概念

    链表中的每一个结点有两个指针域,一个指向前趋,另外一个指向后继


    双向循环链表

    概念

    双向链表中的头结点的前趋指针域指向了尾结点,尾结点的后继指针域指向了头结点,即可称为双向循环链表

    判空条件

    头结点的前趋指针与后继指针指向了本身

    插入算法

    在p结点前插入新结点

    1. s.prior = p.prior;

    2. p.prior.next = s;

    3. s.next = p;

    4. p.prior = s;

       boolean insert(DulNode h,int i,char x){
       	DulNode p,s;
       	int j = 1;
       	p = h.next;//从第一个结点开始
       	//查找第i个结点,当p指向头结点h或p指向第i个结点结束
       	while(p!=h||j<i){
       		j++;
       		p = p.next;
       	}
       	if(j==i){
       		s = new DulNode();//初始化s结点
       		s.data =x;//存放数据在s结点
       		s.prior = p.prior;
       		p.prior.next =s;
       		s.next =p;
       		p.prior =s;
       		return true;
       	}else{
       		return false;
       	}
       }
      

    删除算法

    1. p.prior.next = p.next;

    2. p.next.prior = p.prior;

       boolean delete(DulNode h,int i,char x){
       	DulNode p,s;
       	int j = 1;
       	p = h.next;//从第一个结点开始
       	//查找第i个结点,当p指向头结点h或p指向第i个结点结束
       	while(p!=h||j<i){
       		j++;
       		p = p.next;
       	}
       	if(j==i){
       		p.prior.next = p.next;
       		p.next.prior = p.prior;
       		return true;
       	}else{
       		return false;
       	}
       }
  • 相关阅读:
    单播、广播和多播IP地址
    nagios安装部署及详细配置说明(转)
    centos6.5下cacti部署说明
    HAproxy配置详解
    mysql全量和增量备份详解(带脚本)
    lvs原理及安装部署详解(参考)
    curl命令的用法
    mysql日志解析
    MySQL查看和修改表的存储引擎
    mysql备份和还原
  • 原文地址:https://www.cnblogs.com/stars-one/p/9536510.html
Copyright © 2020-2023  润新知