【计算机408学习笔记】C语言(中级)11.单链表代码实战

11.单链表代码实战

五、线性表的链式表示——简称链表
  • 顺序表:插入和删除操作需要移动大量元素。数组的大小不好确定。占用一大段连续的存储空间,造成很多碎片。
  • 单链表:逻辑上相邻的两个元素在物理位置上不相邻。
  • 例子(单链表结点的定义)
typedef struct LNode{        //单链表结点类型,LNode不能省略
    ElemType data;           //数据域
    struct LNode *next;      //指针域
}LNode, *LinkList;
  • 一个节点需要一个结构体变量存储。当链表最后一个节点后的*next,赋值为NULL。
  • 头指针: 链表中第一个结点的存储位置, 用来标识单链表。
  • 头结点: 在单链表第一个结点之前附加的一个结点, 为了操作上的方便。
  • 若链表有头结点, 则头指针永远指向头结点, 不论链表是否为空, 头指针均不为 , 头指针是链表的必须元素, 他标识一个链表。
  • 头结点是为了操作的方便而设立的, 其数据域一般为空, 或者存放链表的长度。有头结点后, 对在第一结点前插入和删除第一结点的操作就统一了, 不需要频繁重置头指针。 但头结点不是必须的。
  • 链表优点: 插入和删除操作不需要移动元素, 只需要修改指针。不需要大量的连续存储空间。
  • 链表缺点: 单链表附加指针域, 也存在浪费存储空间的缺点。查找操作时需要从表头开始遍历, 依次查找, 不能随机存取。
  • 考研的数据结构都是进行增删改查。
  • 插入操作
//创建新结点代码:
q=(LNode*)malloc(sizeof(LNode))
q->data=x;
//(a) (b)操作的代码:
q->next=p->next;
p->next=q;
//(c)操作的代码:
p->next=q;
q->next=NULL;
  • 删除操作
//(a)(b) (c)操作的代码:
p=GetElem(L,i-1);        //查找删除位置的前驱节点。头结点位置为0
q=p->next;
p->next=q->next;        //断链
free(q);
  • 查找操作
//按序号查找结点值的算法如下:
LNode *p=L->next;
int j=1;
while(p&&j<i){
    p=p->next;
    j++;
}
return p;
  • L是头指针, 用来指向头结点。
//按值查找结点的算法如下:
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
    p=p->next;
}
return p;
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

废柴老妈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值