LinkedList链表(从酒店管理到单链表)

今天说说链表:说到链表就不得不提及数组,两者相爱相杀,但又都是极为重要的基本数据结构类型。相对于链表,我们一般情况下更熟悉数组。(听说加上英文,会显得高端不少):先讲一个小故事(虽然讲的很烂2333)从前,一群小朋友外出游玩,到酒店申请房间啊,他们呢,申请的是数组方式的房间(哈哈)那么他们的房间号就是相连的。他们很容易的相互串门,带队者也可以轻松的找到他们每个人的所在(带队者只用记住第一个...
摘要由CSDN通过智能技术生成

今天说说链表:说到链表就不得不提及数组,两者相爱相杀,但又都是极为重要的基本数据结构类型。

相对于链表,我们一般情况下更熟悉数组。

听说加上英文,会显得高端不少):

先讲一个小故事(虽然讲的很烂2333)

从前,一群小朋友外出游玩,到酒店申请房间啊,他们呢,申请的是数组方式的房间(哈哈)那么他们的房间号就是相连的。他们很容易的相互串门,带队者也可以轻松的找到他们每个人的所在(带队者只用记住第一个小朋友的位置和学号就好)。但问题是,他们这样申请房间的话,有的小朋友如果申请更换房间,会比较麻烦,更有甚者,不小心生病了,需要退房,那么负责人就要重新给每个人好分配房间,大多数小朋友都需要更换自己的房间,就会很麻烦。这时候,酒店管理者想到,如果我们让学号相邻的小朋友的记住他(她)下一个学号的小朋友的房间号(就像一号记住二号的房间号,二号记住三号的房间号),那么负责人还是只用记住第一个小朋友的房间号就可以按照顺序依次找到每个小朋友。(当然要是其中一个小朋友忘记后面小朋友的位置的话。。。我们就失去了一堆小朋友)。酒店管理者发现这样的话,不仅可以使得他们的房间利用率得到大大的提升,并且可以方便住宿人员的调动。

好的,相信读完这个尴尬的小故事,我们大概对链表有了一个感性的认识,他是为了解决一些数组的不足而出现的。下面就是严谨的分析链表的优缺点。

作为有强大功能的链表,对他的操作当然有许多,比如:链表的创建,修改,删除,插入,输出,排序,反序,清空链表的元素,求链表的长度等等。

初学链表,一般从单向链表开始:(本文也暂时只有单向链表)

Advantages 优势

1) Dynamic size(动态大小)

2) Ease of insertion/deletion(方便插入和删除)

Drawbacks 缺点

1) Random access is not allowed. We have to access elements sequentially starting from the first node. So we cannot do binary search with linked lists efficiently with its default implementation.

不允许随机访问。 我们必须从第一个节点开始顺序访问元素。 因此,我们无法使用其默认实现对链接列表进行有效的二分查找。

2) Extra memory space for a pointer is required with each element of the list.

需要额外的空间去存放链表中下一个元素的位置。

3) Not cache friendly. Since array elements are
contiguous locations, there is locality of reference which is not there
in case of linked lists.

不缓存友好。 由于数组元素是连续的位置,因此存在引用位置,而在链接列表的情况下则不存在。

(就是说不能写成a[6])

Representation 表达(内容)

首先,我们将一个链表中的每个元素称为一个节点(Node),特殊的第一个被叫做头节点,最后一个被叫做尾节点。(图中,abcd是四个节点,但注意a不是头节点哈哈,Head是头节点,他指向的a节点)一般来说,头节点Head不存放内容,尾节点没有下一个元素的位置。(以简单的单链表为例)

在这里插入图片描述
A linked list is represented by a pointer to the first node of the
linked list. The first node is called the head. If the linked list is
empty, then the value of the head is NULL.

链接列表由指向链接列表的第一个节点的指针表示。 第一个节点称为头。 如果链表为空,则head的值为NULL。(好绕口
Each node in a list consists of at least two parts:

每一个节点至少包括两部分:

  1. data 数据
  2. Pointer (Or Reference) to the next node 指向下一个结点的指针(指向/引用)
    In C, we can represent a node using structures. Below is an example of a linked list node with integer data.

在c语言中,我们使用结构体来表示,如下面的代码:

struct Node {
int data;
struct Node* next;
};

In Java or C#, LinkedList can be represented as a class and a Node as a
separate class. The LinkedList class contains a reference of Node class
type.

而在java,c#中LinkedList可以表示为一个类,而Node可以表示为单独的类。 LinkedList类包含Node类类型的引用。

class LinkedList { 
	Node head; // head of the list 

	/* Linked list Node*/
	class Node { 
		int data; 
		Node next; 

		// Constructor to create a new node 
		// Next is by default initialized
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值