回顾链表的点点滴滴

基础

链表是比较经典的数据结构,但很多面向过程的软件用的不多,而涉及OS的代码又封装了几层,所以说用的多,但真正有机会去一窥究竟的时候却不是很多。知乎的一篇《通俗易懂讲解 链表》对链表讲述的深入浅出,是不错的入门文章。在此启发下,整理一下学习心得。

链表的单元-node or item

一般提到最多的是双向链表,链表的定义特色可以理解为,有一个携带指针的数据结构,本身携带的指针prev指向前一个链表单元,指针next指向下一个链表单元。很多英文用node表示这个单元,偶尔也会用item。

struct linked_list_item{
	struct linked_list_item *prev;
	struct linked_list_item *next;
}

很显然单纯的链表只是教学用的,真实的链表要有内容。

struct linked_list_item{
	struct linked_list_item *item_ptr;
	struct linked_list_item *prev;
	struct linked_list_item *next;
}

上边这个链表引入了指针,指针上挂在链表数组,这样链表就复杂了,呵呵。

链表的极限:数组or队列

队列(queue)是从现实生活中抽象出来的概念,队列的队头和队尾,如果不看动态关系的话,用数组可以表达。但数组不能表达的是动态关系,及出队和入队对于数组来说,实现的代价太高了。而链表的prev和next指针表达了队列的单元之间的关系,也使得出队和入队的操作变得很容易。另外在数组、链表、队列、栈数据结构特点,各自优点和缺点中也非常明确的指出了几种结构的优缺点。

参考

程序员英语——Linked List 链表
数组、链表、队列、栈数据结构特点,各自优点和缺点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值