特殊的链表——双向、循环、静态

双向链表

定义 :每个节点有两个指针域,分别知道直接前驱直接后继节点 , 特点是可以重任意节点出发,从两个方向遍历链表

数据结构

typedef struct node {
    int data;
    struct node *font ;
    struct node *next;
} NODE, *LinkList;

在这里插入图片描述
插入

  // p 为链中节点  s 为待插入节点 把s 放在p前
    s->font = p->font ;  // s 的前驱在是 p 的前驱节点
    p->font->next = s ;  // p 前驱节点的 后继节点是 s
    s->next = p ;
    p->font =s ;

在这里插入图片描述
删除

    p->font->next = p->next ; // p 的前驱节点的后继 是 p 的后继节点
    p->next->font = p->font ; // p 的后继节点 的前驱节点 是 p 的前驱节点
    free(p) ;

循环链表

定义 :在单向或双向链表的基础上令表尾节点的指针指向第一个节点,构成循环

静态链表

定义 : 借数组来描述线性表的链式存储,用数组元素的下标表示元素所在节点的指针

在这里插入图片描述

指针域代表的下一个值得地址

数据结构

typedef struct node {
    int index; // 指针
    int data;
} NODE;

// 遍历

void showAll(NODE[] n) {
    int i = 0;
    while (true) {
        printf("%d\n", n[i].data);
        if (n[i].index == 0) { //  如果index 为 0 表示后面没有数据了 
            break;
        } else {
            i = n[i].index;
        }
    }
}

插入: 需要判断是否有新的空间
删除: 就需要标记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值