ylww

随笔仅作学习记录,请辩证参考!!!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不必相邻。

如何表示逻辑上的相邻关系?可以给每个元素附加一个指针域,指向下一个元素的存储位置。

 

 

 

单链表

 

 

   单链表的功能实现中:按照指定位置插入元素和删除指定位置的元素时,都要先定位到前一个元素。

 

 

 

 针对这两个功能可以看出,若只是定位到前一个元素,采用  while(p && index <i-1) 与 while(p->next && index <i-1)是没有区别的。(在合理范围内,p都是指向前一个元素的。一共5个,找第6的前一个也可以)。

区别在于,是插入还是删除。比如若只有5个元素,在第6个位置插入是可以的,在第6个位置删除是不合法的。而且删除中还要用到p->next->next。

故插入采用p——if(!p)  统一进步,不提前看下一个。比较合理;

删除采用 p->next   if(! p->next)  比较合理。

 

 

 

循环链表

 解决此问题时候,要避开头节点计数:

 

 p为L;i是要出列的报数值;j计数,初始为0。

 

 

 

 

双向链表

 

 其结构体定义

typedef struct _LinkNode {

    int data;    //结点的数据域

    struct _LinkNode* next;  //下一个结点的指针域

    struct _LinkNode* prev;  //上一个结点的指针域

}LinkNode, LinkList;

 

 

Linux内核“共享”双向链表

 

是否存在一种方式,让多个链表共享同一套链表操作。

 

 

 定义其他不同结构体时,将之当作元素放入其中。

例如:

 那么如何通过“挂件”访问其他元素:

offsetof是一个宏,可以求出数据结构中的某个成员离起始地址的偏移量

posted on 2022-07-05 20:01  理想主义者光芒万丈  阅读(64)  评论(0)    收藏  举报