数据结构----线性表(链式存储)

1.链表的头指针和头结点

头指针是指向第一个结点的指针。

如果存在头结点,那么头指针则指向头结点,头结点的指针指向存储的首结点(第一个元素);

如果不存在头结点,那么头指针直接指向存储的首结点。

2.为何可以在定义结构体时可以在结构体中定义指向自己类型的指针
struct list_node_t 
{    
int data;

    struct list_node_t * next;

};

这样并不会报错, 编译器会计算结构体的大小, 在计算这个结构体大小的时候不会有问题(32位机器,int是4字节, 指针也是4字节, 共8字节).如果你不用指针就会报错, 因为那时候编译器还不知道结构体大小。

3.单链表的读取

查找单链表中的第i个元素,从第一个元素开始,一个一个的向后查找,直到找到第i个。

p=L->next; j=1; 让p指向链表的第一个结点,j为计数器

while(p&&j<i)

{

p=p->next;

++j;

}

4.链表插入

链表插入操作,s->next=p->next;p->next=s;顺序不能颠倒

5.链表删除

链表删除操作:p->next=p->next->next其实就执行了这一个操作

添加中介q:q=p->next;p->next=q->next

6.头插法创建链表

链表表头插入操作:p->next=L->next;L-next=p;

7.尾插法创建链表

链表表尾插入操作:r->next=p;r=p;r代表的是尾结点

7.循环链表

将链表的尾结点的空指针改为头结点的地址,即组成了带有头结点的循环链表,判断带有头结点的循环链表是否为空,可以判断尾结点的指针等不等于头指针,如果相等,则为空

8.用尾指针代替头指针的循环链表

用尾指针替代头指针,使检索头结点和尾结点的复杂度都为O(1),头结点rear->next->next

9.静态链表

结点的组成跟链表差不多,用一个游标代替了指针域,用结构体数组来容纳所有的元素,构成一个静态的链表。

10.静态链表的插入

先从备用链表中取一个数据空间,然后接下来的操作跟动态链表一致。

11.静态链表的删除

删除需要删除的结点,然后将结点的空间归还给备用链表。

12.循环链表尾指针表示法

可以很快的查找到链表的头结点和尾结点

13.双向链表

在每一个元素添加另一个指针域,使其指向它的前驱

14.双向链表添加元素

双向链表添加元素:s->prior=p;s->next=p-next;

p->next->prior=s;p->next=s;顺序必须这样,非常严格

15.双向链表删除元素

双向链表删除元素:p->prior->next=p->next;

p->next->prior=p->prior;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值